第9单元 - 作业5:OJ编程 - 使用异常进行图形类的错误处理

查看帮助

返回
 

温馨提示:

1.本次作业属于Online Judge题目,提交后由系统即时判分。

2.学生可以在作业截止时间之前不限次数提交答案,系统将取其中的最高分作为最终成绩。

基于第8单元的作业内容,为图形类添加异常处理代码

依照学术诚信条款,我保证此作业是本人独立完成的。

1
基于第8单元作业2的代码,为图形类添加异常处理的代码。(5分)
时间限制:500ms内存限制:32000kb
#include <iostream>
#include <string>
#include <sstream>
#include <stdexcept> using namespace std; class MyShape {
protected:
int R_, G_, B_; string colorToString() {
stringstream ss;
ss << R_ << " " << G_ << " " << B_;
return ss.str();
}
public:
void setColor(int R, int G, int B) {
R_ = R; G_ = G, B_ = B;
}
int getR() {
return R_;
}
int getG() {
return G_;
}
int getB() {
return B_;
}
virtual void Draw() = 0;
MyShape() {
R_ = 255; G_ = 255, B_ = 255;
}
}; class MyCircle : public MyShape {
private:
int x_, y_, radius_;
int min; public:
MyCircle(int x, int y, int radius) {
x_ = x;
y_ = y;
radius_ = radius;
} MyCircle() {
x_ = y_ = 200;
radius_ = 100;
} MyCircle(MyCircle& aCircle) {
x_ = aCircle.x_;
y_ = aCircle.y_;
radius_ = aCircle.radius_;
R_ = aCircle.getR();
G_ = aCircle.getG();
B_ = aCircle.getB();
}
void setCenter(int x, int y) {
x_ = x;
y_ = y;
} void setRadius(int radius) {
//3. 修改setRadius(int radius)函数,当radius的值小于等于0时,抛出underflow_error异常。
//3.1 注意:仅仅在setRadius函数中检查radius的值是否合法;在其他的函数中,包括MyShape的构造函数中,并不检查radius的值是否合法)
//3.2 在创建underflow_error异常对象时,给其构造函数传递一个字符串
//3.2 字符串的内容是:"Radius underflow: RADIUS",(不包含双引号)。其中的“RADIUS”是发生异常时setRadius()函数所接受的参数
//2.3 字符串内容示例:"Radius underflow: -100" (实际输出不包含双引号;单词间用一个空格分隔;冒号为半角字符,冒号前无空格;冒号与后面的数之间有一个空格。 - 100是传递给setRadius()函数的参数) if (radius > 0)
{
radius_ = radius;
}
else
{
stringstream ss;
ss << "Radius underflow: " << radius;
throw underflow_error(ss.str());
}
} void Draw() {
} //----在此处添加关系运算符 >、<、>=、<=、==、!= 的重载原型声明
int& operator[](const int &index);
}; //----在此处添加关系运算符的重载定义
int& MyCircle::operator[](const int & index)
{
//2. 修改数组下标运算符的重载代码,当下标超出范围时,抛出range_error异常 。(不再返回带符号整型数中最小的值)
//2.1 在创建range_error异常对象时,给其构造函数传递一个字符串
//2.2 字符串的内容是:"Index exceeds scope: INDEX",(不包含双引号)。其中的“INDEX”是发生异常时数组下标运算符所接受的参数
//2.3 字符串内容示例:"Index exceeds scope: 3" (实际输出不包含双引号;单词间用一个空格分隔;冒号为半角字符,冒号前无空格;冒号与后面的数字之间有一个空格。数字3是传递给数组下标运算符的参数) if (index == 0)
{
return x_;
}
else if (index == 1)
{
return y_;
}
else if (index == 2)
{
return radius_;
}
else
{
stringstream ss;
ss << "Index exceeds scope: " << index;
throw range_error(ss.str());
}
} int main() {
int r1 = 0, r2 = 0;
cin >> r1 >> r2;
MyCircle c1, c2;
try {
c1.setRadius(r1);
c2.setRadius(r2);
for (int i = 0; i <= 3; i++) {
cout << c1[i] << endl;
}
}
catch (underflow_error& e) {
cout << e.what() << endl;
}
catch (runtime_error& e) {
cout << e.what() << endl;
} try {
c2[r1 / (r2 == 0 ? 1 : r2)] = 321;
for (int i = 3; i >= 0; i--) {
cout << c2[i - 1] << endl;
}
}
catch (exception& e) {
cout << e.what() << endl;
} // GCC及VC编译器在调试模式下会暂停,便于查看运行结果
#if ( defined(__DEBUG__) || defined(_DEBUG) )
cin.ignore(numeric_limits<streamsize>::max(), '\n');
cin.get();
#endif
return 0;
}

网易云课堂_C++程序设计入门(下)_第9单元:白公曾咏牡丹芳,一种鲜妍独“异常”_第9单元 - 作业5:OJ编程 - 使用异常进行图形类的错误处理的更多相关文章

  1. 网易云课堂_C++程序设计入门(下)_第10单元:月映千江未减明 – 模板_第10单元 - 单元作业:OJ编程 - 创建数组类模板

    第10单元 - 单元作业:OJ编程 - 创建数组类模板 查看帮助 返回   温馨提示: 1.本次作业属于Online Judge题目,提交后由系统即时判分. 2.学生可以在作业截止时间之前不限次数提 ...

  2. 网易云课堂_C++程序设计入门(下)_第7单元:出入虽同趣,所向各有宜 – 文件输入和输出_第7单元 - 作业2:编程互评

    第7单元 - 作业2:编程互评 查看帮助 返回   提交作业(剩余10天) 完成并提交作业     作业批改 互评训练   互评作业   自评作业     成绩公布 查看成绩   由于在线编程不支持 ...

  3. 网易云课堂_C++程序设计入门(下)_期末考试_期末考试在线编程题目

    期末考试在线编程题目 返回考试   本次考试题目一共两个,在考试期间可以不限制次数地提交 温馨提示: 1.本次考试属于Online Judge题目,提交后由系统即时判分. 2.学生可以在考试截止时间 ...

  4. 网易云课堂_C++程序设计入门(下)_第11单元:工欲善其事必先利其器 - STL简介_第11单元 - 单元作业2:OJ编程 - list 与 deque

    第11单元 - 单元作业2:OJ编程 - list 与 deque 查看帮助 返回   温馨提示: 1.本次作业属于Online Judge题目,提交后由系统即时判分. 2.学生可以在作业截止时间之 ...

  5. 网易云课堂_C++程序设计入门(下)_第8单元:年年岁岁花相似– 运算符重载_第8单元 - 作业2:OJ编程 - 重载数组下标运算符

    第8单元 - 作业2:OJ编程 - 重载数组下标运算符 查看帮助 返回   温馨提示: 1.本次作业属于Online Judge题目,提交后由系统即时判分. 2.学生可以在作业截止时间之前不限次数提 ...

  6. 网易云课堂_C++程序设计入门(上)_第4单元:物以类聚 – 对象和类_第4单元作业【3】- 在线编程(难度:难)

    1 在本单元作业[1]和作业[2]的基础上,创建一个MyRectangle类,并在main函数中创建类的实例.(10分) 题目难度: 难 题目内容: Screen类: 与作业[2]要求完全相同. 如果 ...

  7. 网易云课堂_C++程序设计入门(上)_第6单元:丹枫虽老犹多态–继承与多态_第6单元作业【2】- 在线编程(难度:中)

    第6单元作业[2]- 在线编程(难度:中) 查看帮助 返回   温馨提示: 1.本次作业属于Online Judge题目,提交后由系统即时判分. 2.学生可以在作业截止时间之前不限次数提交答案,系统 ...

  8. 网易云课堂_C++程序设计入门(上)_第5单元:万类霜天竞自由 – 对象和类的更多内容_第5单元作业【4】 - 在线编程(难度:难)

    第5单元作业[4] - 在线编程(难度:难) 查看帮助 返回   温馨提示: 1.本次作业属于Online Judge题目,提交后由系统即时判分. 2.学生可以在作业截止时间之前不限次数提交答案,系 ...

  9. 网易云课堂_C++程序设计入门(上)_第2单元:丹青画松石– EGE图形库

    第2节:一个简单的EGE程序 #ifndef _GRAPHICS_H_ #define _GRAPHICS_H_ #ifndef __cplusplus #error You must use C++ ...

随机推荐

  1. 垃圾回收gc --翻译

    原文在https://developer.mozilla.org/en-US/docs/Web/JavaScript/Memory_Management.基本保持了平译,并在一些地方做了概念解释.(转 ...

  2. Java 实现C#中的String.format效果 解决("我是{0},今年了","whaozl") bug

        /**      * 需要引入com.alibaba.fastjson.1.2.8      * 两种调用方式      * String template1="我是{0},今年{1 ...

  3. 解决Jenkins忘记用户名,密码

    windows系统: 进入windows默认目录   C:\Users\Administrator\.jenkins\users  修改配置文件即可

  4. 微信小程序let和var以及const有什么区别

    在JavaScript中有三种声明变量的方式:var.let.const. var:声明全局变量,换句话理解就是,声明在for循环中的变量,跳出for循环同样可以使用. for(var i=0;i&l ...

  5. vue中使用echarts(vue+vue-cli+axios+jsonp+echarts)

    一.安装echarts: cnpm i echarts -D 二.在vue-cli的main.js文件中引用echarts: import charts from 'echarts' Vue.prot ...

  6. wx小程序知识点(五)

    五.双向绑定和 vue 的区别 ① vue 中实现双向绑定只需要修改 this.data var vm = new Vue({ el: '#example', data: { message: 'He ...

  7. [pwnable.kr]Dragon

    0x00: dragon 是一个UAF漏洞的利用. UseAfterFree 是堆的漏洞利用的一种 简单介绍 https://www.owasp.org/index.php/Using_freed_m ...

  8. Windows Server 快速生成免费SSL证书 (letsencrypt)

    最近官网需求部署个SSL证书,一番操作后把借鉴的网站与实际过程记录下来 Let's Encrypt,官网是https://letsencrypt.org/,它是一个由各大公司赞助的公益组织: 有趋势有 ...

  9. python3基础: 元组tuple、 列表list、 字典dict、集合set。 迭代器、生成器

    一.元组: tuple Python 的元组与列表类似,不同之处在于元组的元素不能修改. 元组中的元素值是不允许删除的,但我们可以使用del语句来删除整个元组 tup2 = (111, 22, 33, ...

  10. ORA-01440:要减小精度和标准,则要修改的列必须为空

    修改字段的精度时,提示“ ORA-01440:要减小精度和标准,则要修改的列必须为空 ” 解决方法:将该表中的数据全部删除即可