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

查看帮助

返回
 

温馨提示:

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

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

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

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

1
基于第8单元作业2的代码,为图形类添加异常处理的代码。(5分)
时间限制:500ms内存限制:32000kb
  1. #include <iostream>
  2. #include <string>
  3. #include <sstream>
  4. #include <stdexcept>
  5.  
  6. using namespace std;
  7.  
  8. class MyShape {
  9. protected:
  10. int R_, G_, B_;
  11.  
  12. string colorToString() {
  13. stringstream ss;
  14. ss << R_ << " " << G_ << " " << B_;
  15. return ss.str();
  16. }
  17. public:
  18. void setColor(int R, int G, int B) {
  19. R_ = R; G_ = G, B_ = B;
  20. }
  21. int getR() {
  22. return R_;
  23. }
  24. int getG() {
  25. return G_;
  26. }
  27. int getB() {
  28. return B_;
  29. }
  30. virtual void Draw() = 0;
  31. MyShape() {
  32. R_ = 255; G_ = 255, B_ = 255;
  33. }
  34. };
  35.  
  36. class MyCircle : public MyShape {
  37. private:
  38. int x_, y_, radius_;
  39. int min;
  40.  
  41. public:
  42. MyCircle(int x, int y, int radius) {
  43. x_ = x;
  44. y_ = y;
  45. radius_ = radius;
  46. }
  47.  
  48. MyCircle() {
  49. x_ = y_ = 200;
  50. radius_ = 100;
  51. }
  52.  
  53. MyCircle(MyCircle& aCircle) {
  54. x_ = aCircle.x_;
  55. y_ = aCircle.y_;
  56. radius_ = aCircle.radius_;
  57. R_ = aCircle.getR();
  58. G_ = aCircle.getG();
  59. B_ = aCircle.getB();
  60. }
  61. void setCenter(int x, int y) {
  62. x_ = x;
  63. y_ = y;
  64. }
  65.  
  66. void setRadius(int radius) {
  67. //3. 修改setRadius(int radius)函数,当radius的值小于等于0时,抛出underflow_error异常。
  68. //3.1 注意:仅仅在setRadius函数中检查radius的值是否合法;在其他的函数中,包括MyShape的构造函数中,并不检查radius的值是否合法)
  69. //3.2 在创建underflow_error异常对象时,给其构造函数传递一个字符串
  70. //3.2 字符串的内容是:"Radius underflow: RADIUS",(不包含双引号)。其中的“RADIUS”是发生异常时setRadius()函数所接受的参数
  71. //2.3 字符串内容示例:"Radius underflow: -100" (实际输出不包含双引号;单词间用一个空格分隔;冒号为半角字符,冒号前无空格;冒号与后面的数之间有一个空格。 - 100是传递给setRadius()函数的参数)
  72.  
  73. if (radius > 0)
  74. {
  75. radius_ = radius;
  76. }
  77. else
  78. {
  79. stringstream ss;
  80. ss << "Radius underflow: " << radius;
  81. throw underflow_error(ss.str());
  82. }
  83. }
  84.  
  85. void Draw() {
  86. }
  87.  
  88. //----在此处添加关系运算符 >、<、>=、<=、==、!= 的重载原型声明
  89. int& operator[](const int &index);
  90. };
  91.  
  92. //----在此处添加关系运算符的重载定义
  93. int& MyCircle::operator[](const int & index)
  94. {
  95. //2. 修改数组下标运算符的重载代码,当下标超出范围时,抛出range_error异常 。(不再返回带符号整型数中最小的值)
  96. //2.1 在创建range_error异常对象时,给其构造函数传递一个字符串
  97. //2.2 字符串的内容是:"Index exceeds scope: INDEX",(不包含双引号)。其中的“INDEX”是发生异常时数组下标运算符所接受的参数
  98. //2.3 字符串内容示例:"Index exceeds scope: 3" (实际输出不包含双引号;单词间用一个空格分隔;冒号为半角字符,冒号前无空格;冒号与后面的数字之间有一个空格。数字3是传递给数组下标运算符的参数)
  99.  
  100. if (index == 0)
  101. {
  102. return x_;
  103. }
  104. else if (index == 1)
  105. {
  106. return y_;
  107. }
  108. else if (index == 2)
  109. {
  110. return radius_;
  111. }
  112. else
  113. {
  114. stringstream ss;
  115. ss << "Index exceeds scope: " << index;
  116. throw range_error(ss.str());
  117. }
  118. }
  119.  
  120. int main() {
  121. int r1 = 0, r2 = 0;
  122. cin >> r1 >> r2;
  123. MyCircle c1, c2;
  124. try {
  125. c1.setRadius(r1);
  126. c2.setRadius(r2);
  127. for (int i = 0; i <= 3; i++) {
  128. cout << c1[i] << endl;
  129. }
  130. }
  131. catch (underflow_error& e) {
  132. cout << e.what() << endl;
  133. }
  134. catch (runtime_error& e) {
  135. cout << e.what() << endl;
  136. }
  137.  
  138. try {
  139. c2[r1 / (r2 == 0 ? 1 : r2)] = 321;
  140. for (int i = 3; i >= 0; i--) {
  141. cout << c2[i - 1] << endl;
  142. }
  143. }
  144. catch (exception& e) {
  145. cout << e.what() << endl;
  146. }
  147.  
  148. // GCC及VC编译器在调试模式下会暂停,便于查看运行结果
  149. #if ( defined(__DEBUG__) || defined(_DEBUG) )
  150. cin.ignore(numeric_limits<streamsize>::max(), '\n');
  151. cin.get();
  152. #endif
  153. return 0;
  154. }

网易云课堂_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. 谈谈我所理解的HashMap和HashTable

    HashMap和HashTable之间的联系和区别如下: 1.HashMap几乎可以等价于Hashtable,但是它们之间继承不同:HashMap extends AbstractMap implem ...

  2. uestc summer training #4 牛客第一场

    A dp[i][j][k]可以n3地做 但是正解是找把问题转化为一个两点不相交路径 最终答案为C(n+m, n)2-C(n+m, m-1)C(n+m,n-1) B 把题目的矩阵看成无向图的邻接矩阵 这 ...

  3. mongodb 3.0 WT 引擎性能测试(转载)

    网上转载来的测试,仅供参考.原文地址:http://www.mongoing.com/benchmark_3_0 类机器. 测试均在单机器,单实例的情况下进行. 机器A(cache 12G,即内存&g ...

  4. C++ 编码导致编译错误

    记录一个问题 平时经常用Notepad++写C++,然后g++编译 最近出现一个莫名其妙的问题 原来是编译时遇到了非法字符 用Notepad++一看,原来文件的编码出现的变化 不是UTF-8或者其他对 ...

  5. python之路-笔录3[BOM&DOM&JQuery]

    *** 目录 *** 1. BOM 学习 2. DOM 学习 3. jQuery 学习 *** END *** 1. BOM BOM(Browser Object Model)是指浏览器对象模型,它使 ...

  6. qt5---QMessageBox消息框

    需要  #include <QMessageBox> QMessageBox::StandardButton sb; sb=QMessageBox::critical(this," ...

  7. 在神经网络中weight decay

    weight decay(权值衰减)的最终目的是防止过拟合.在损失函数中,weight decay是放在正则项(regularization)前面的一个系数,正则项一般指示模型的复杂度,所以weigh ...

  8. 【C#-读取XML文件】XMLReader读取XML文档

    使用   XmlReader.Create("文件路径")   加载xml文件 XmlReader使用流的方式来读取. //使用XMLReader读取XML数据 XmlReader ...

  9. js-点击+加关注变成已关注,已关注状态时,鼠标滑动上的状态时取消关注

    效果: HTML: <div class="rightBtn cur">+关注</div> CSS: .rightBtn{ width: 80px; hei ...

  10. Tomcat配置多个文件夹

    在Tomcat下,conf/server.xml文件下的 Server/Service/Engine/Host节点下,最后添加上以下语句   <Context path="/myweb ...