//cc38b_demo,21days_C++_异常_(2)txwtech20200121在异常中使用虚函数-多态

//--异常层次结构
//*异常的类-创建自己的异常类
//*异常派生-就是继承
//*异常中的数据:数据成员

//*按引用传递异常

//
//*->在异常中使用虚函数/可以使用多态,简化catch

 //cc38b_demo,21days_Cpp_异常_(2)txwtech20200121在异常中使用虚函数-多态

 //--异常层次结构
//*异常的类-创建自己的异常类
//*异常派生-就是继承
//*异常中的数据:数据成员 //*按引用传递异常 //
//*->在异常中使用虚函数/可以使用多态,简化catch #include <iostream>
using namespace std;
const int DefaultSize = ;
class Array//数组类,类似动态数组vector
{
public:
Array(int itsSize = DefaultSize);
~Array() { delete[] pType; }//删除[]数组指针
//运算符重载
//下标运算符重载
int& operator[](int offSet);//非-常函数
const int& operator[](int offSet) const;//常函数
//访问器,accessors
int GetitsSize() const { return itsSize; }
//做异常类
class xBoundary {};
class xSize
{
public:
xSize() {}
xSize(int size) :itsSize(size) {}
~xSize() {};
int GetSize() { return itsSize; } ////*->在异常中使用虚函数 virtual void PrintError()
{
cout << "下标发生错误: " << itsSize << endl;
}
//private:
protected:
int itsSize; };
//class xZero {};
//class xNegative {};
//class xTooSmall {};
//class xTooBig {}; //通过继承实现异常的层次结构,好处是什么?得到更详细的异常信息 class xZero :public xSize
{
public:
xZero(int size) :xSize(size) {}
virtual void PrintError()
{
cout << "下标不能是0"<< endl;
}
};
class xNegative :public xSize
{
public:
xNegative(int size) :xSize(size) {}
virtual void PrintError()
{
cout << "下标不能是负数" <<xSize::itsSize<< endl;
}
};
class xTooSmall :public xSize
{
public:
xTooSmall(int size) :xSize(size) {}
virtual void PrintError()
{
cout << "下标不能小于10:当前是:" << xSize::itsSize << endl;
}
};
class xTooBig :public xSize
{
public:
xTooBig(int size) :xSize(size) {}
virtual void PrintError()
{
cout << "下标不能>3000" << xSize::itsSize << endl;
}//catch就可以简化了
};
private:
int *pType;
int itsSize;
};
int& Array::operator[](int offset)//非-常函数
{
int size = this->GetitsSize();
if (offset >= && offset < size)
return pType[offset];
throw xBoundary(); //xBoundary后面记得加括号()
}
const int& Array::operator[](int offset) const//常函数
{
int size = this->GetitsSize();
if (offset >= && offset < size)
return pType[offset];
//异常类,用着下标操作中
throw xBoundary(); //xBoundary后面记得加括号()
} Array::Array(int size) :itsSize(size) //
{
if (size == )
throw xZero(size);
else if (size < )
throw xNegative(size);
else if (size > )
throw xTooBig(size);
else if (size < )
throw xTooSmall(size);
pType = new int[size];//动态创建数组,放在pType指针
for (int i = ; i < size; i++)
pType[i] = ;
} int main()
{ try
{
Array a;
Array intArray();
//Array b(-12);
//Array b(30000);
Array b();//6<10发生异常,太小
for (int j = ; j < ; j++)
{
intArray[j] = j;
cout << "intArray[" << j << "]okay..." << endl;
} }
catch (Array::xBoundary)
{
cout << "下标越界了" << endl;
}
//简化有继承关系的,实现多态
catch (Array::xSize& exp)
{
exp.PrintError();
}
//catch (Array::xZero) //构造函数里面throw与catch里面的顺序需要一致
//{
// cout << "下标不能为0" << endl;
//}
//
//catch (Array::xNegative theException)//构造函数里面throw与catch里面的顺序需要一致
//{
// cout << "下标不能是负数: " << theException.GetSize() << endl;
//}
//
//catch (Array::xTooBig theException)//构造函数里面throw与catch里面的顺序需要一致
//{
// cout << "下标不能>3000:" << theException.GetSize() << endl;
//}
//
//catch (Array::xTooSmall theException)//构造函数里面throw与catch里面的顺序需要一致
//{
// cout << "下标不能<10,当前是:" << theException.GetSize() << endl;
//}
catch (...)//catch需要有顺序,...放到最后
{
cout << "发生未知异常" << endl;
}
cout << "Done." << endl;
getchar();
//system("pause");
return ;
}

cc38b_demo_C++_异常_(2)txwtech在异常中使用虚函数-多态的更多相关文章

  1. C++篇:第八章_类_知识点大全

    C++篇为本人学C++时所做笔记(特别是疑难杂点),全是硬货,虽然看着枯燥但会让你收益颇丰,可用作学习C++的一大利器 八.类 (一)类的概念与规则 "子类"和"子类型& ...

  2. luogg_java学习_10_异常_反射

    本文为博主辛苦总结,希望自己以后返回来看的时候理解更深刻,也希望可以起到帮助初学者的作用. 转载请注明 出自 : luogg的博客园 谢谢配合! 异常_反射 异常 异常就是导致程序中断执行的一段指令流 ...

  3. InvalidClassException异常_原理和解决方案和练习_序列化集合

    InvalidClassException异常_原理和解决方案 当JVM反序列化对象的时候,能找到class文件,但是class文件在序列化对象之后发生了修改,那么反序列化操作也会失败,抛出一个Inv ...

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

    第9单元 - 作业5:OJ编程 - 使用异常进行图形类的错误处理 查看帮助 返回   温馨提示: 1.本次作业属于Online Judge题目,提交后由系统即时判分. 2.学生可以在作业截止时间之前 ...

  5. boost/lexical_cast.hpp的简单使用方法_行动_新浪博客

    boost/lexical_cast.hpp的简单使用方法_行动_新浪博客     boost/lexical_cast.hpp的简单使用方法    (2010-03-19 16:31:13)    ...

  6. 01 语言基础+高级:1-7 异常与多线程_day05 【异常、线程】

    day05 [异常.线程] 主要内容 异常.线程 教学目标 能够辨别程序中异常和错误的区别 说出异常的分类 说出虚拟机处理异常的方式 列举出常见的三个运行期异常 能够使用try...catch关键字处 ...

  7. cb19a_c++_只适合string类型的操作_提取_追加_替换

    *cb19a_c++_只适合string类型的操作_提取_追加_替换三个substr重载函数-获取一个字符串的一部分六个append重载函数-追加字符十个replace重载函数-替换更换 重载函数越多 ...

  8. cb16a_c++_顺序容器的选用_排序_二分查找

    /*cb16a_c++_顺序容器的选用_排序_二分查找顺序容器: 1.vector的优点与缺点 vector优点:排序利用下标,快速排序,做二分查找非常快 2.list的优点与缺点 list优点:插入 ...

  9. “RazorEngine.Templating.TemplateCompilationException”类型的异常在 RazorEngine.NET4.0.dll 中发生,但未在用户代码中进行处理

    错误信息: "RazorEngine.Templating.TemplateCompilationException"类型的异常在 RazorEngine.NET4.0.dll 中 ...

随机推荐

  1. 在Cent OS云服务器上部署基于TP5后端代码踩坑记录_艾孜尔江撰

    推荐使用镜像安装Cent OS系统,或者在纯净安装完成之后在完成Apache+MySQL+PHP的时候不要每个单独安装,因为这样会出一些三者之间版本不配的问题,网上各种说法都有,查起来也非常困难,版本 ...

  2. 面向对象案例-学生信息管理系统V1.1

    1.学生类 package com.qfedu.student.entity; /** * 学生类实体 * * @author GGGXXC * */ public class Student { p ...

  3. 项目工程化之git提交规范以及 CHANGELOG生成

    事先声明,本文是参考了其他大神的博客之后自己尝试的记录,具体可以参考如下 链接 先说说git 提交规范把,这里基本都是这个工具 cz-customizable 1,安装 npm install cz- ...

  4. 【朝夕Net社区技术专刊】Core3.1 WebApi集群实战专题---WebApi环境搭建运行发布部署篇

    欢迎大家阅读<朝夕Net社区技术专刊>第1期 原文是我在知乎发表的,现在在这里分享! 我们致力于.NetCore的推广和落地,为更好的帮助大家学习,方便分享干货,特创此刊!很高兴你能成为首 ...

  5. 快速复习C语言 - 1变量与运算符

    变量与运算符 本篇以读者知道 int.char.float.double 等数据类型为前提条件. float 类型注意事项 float 类型数没有办法跟一个数真正比较是否相等,可以定义借助绝对值在一定 ...

  6. Rocket - tilelink - BankBinder

    https://mp.weixin.qq.com/s/oZCYBdy5glxJQmYKVWvpvA   简单介绍BankBinder的实现.   ​​   1. 基本介绍   A BankBinder ...

  7. EntityFramework数据持久化 Linq介绍

    一.LINQ概述与查询语法 二.LINQ方法语法基础(重点) 三.LINQ聚合操作与元素操作(重点) 四.数据类型转换(重点) 一.LINQ概述与查询语法 1.LINQ(Language Integr ...

  8. Java实现 LeetCode 605 种花问题(边界问题)

    605. 种花问题 假设你有一个很长的花坛,一部分地块种植了花,另一部分却没有.可是,花卉不能种植在相邻的地块上,它们会争夺水源,两者都会死去. 给定一个花坛(表示为一个数组包含0和1,其中0表示没种 ...

  9. Java实现 蓝桥杯 算法提高 摩尔斯电码

    算法提高 9-3摩尔斯电码 时间限制:1.0s 内存限制:256.0MB 提交此题 问题描述 摩尔斯电码破译.类似于乔林教材第213页的例6.5,要求输入摩尔斯码,返回英文.请不要使用"zy ...

  10. Java实现 蓝桥杯VIP 算法提高 传染病控制

    算法提高 传染病控制 时间限制:1.0s 内存限制:512.0MB 问题描述 近来,一种新的传染病肆虐全球.蓬莱国也发现了零星感染者,为防止该病在蓬莱国大范围流行,该国政府决定不惜一切代价控制传染病的 ...