C++--异常处理遇上运算符重载
来源:互联网 发布:梦幻西游网络出错 编辑:程序博客网 时间:2024/03/28 23:36
今天我们来说下异常处理。
异常处理的基本语法:
try{
复合语句
}
catch(异常类型声明)
复合语句
catch(类型(形参))
复合语句
有这样一个案例:
设计一个数组类Myarray,重载[]操作
数据初始化时,对数据的个数进行有效的检查
1)index<0,抛出异常eNegative
2)index=0 抛出异常eZero
3)index>1000 抛出异常eTooBig
4)index<10 抛出异常 eTooSmall
5)eSize是以上类的父类,实现有参数构造,并定义virtual void printErr()输出错误。
根据以上条件我写了一个测试代码。
#include <iostream>using namespace std;class Myarray{public:Myarray(int len);~Myarray();int getlen();int& operator [](int index);class eSize{public:eSize(int size){m_size =size;}virtual void pritErro(){cout << "Size" << m_size << endl;}protected:int m_size;};class eNagative :public eSize{public:eNagative(int size):eSize(size){}virtual void pritErro(){cout << "eNagative_Size:" << m_size << endl;}};class eZero :public eSize{public:eZero(int size) :eSize(size){}virtual void pritErro(){cout << "eZero_Size:" << m_size << endl;}};class eTooBig:public eSize{public:eTooBig(int size) :eSize(size){}virtual void pritErro(){cout << "eTooBig_Size:" << m_size << endl;}};class eTooSmall :public eSize{public:eTooSmall(int size) :eSize(size){}virtual void pritErro(){cout << "eTooSmall_Size:" << m_size << endl;}};private:int length;int *m_base;};Myarray::Myarray(int len){if (len < 0){throw eNagative(len);}else if (len==0){throw eZero(len);}else if (len < 10){throw eTooSmall(len);}else if (len >1000){throw eTooBig(len);}length = len;m_base = new int[length];}Myarray::~Myarray(){if (m_base != NULL){delete [] m_base;m_base = NULL;length = 0;}}int Myarray::getlen(){return length;}int &Myarray::operator[](int index){return m_base[index];}int main(){try{Myarray a(-5);for (int i = 0; i <a.getlen();i++){a[i] = i + 1;cout << a[i] << endl;}}catch (Myarray::eSize &e){e.pritErro();}return 0;}如果写成Myarray a(-5); 会出现如下图所示结果
如果是Myarray a(20);会出现下面的结果。
其余就不一一测试了,这里要说的是
异常是超脱函数机制,是跨函数的。
异常严格的按照类型匹配原则。
基础知识就到这里。
1 0
- C++--异常处理遇上运算符重载
- C++--模板遇上运算符重载
- 当友元遇上运算符重载
- C++-运算符重载
- [C++]重载运算符
- C#:运算符重载
- c++-++运算符重载
- C++:重载运算符
- 运算符重载(C++)
- [c++]运算符重载
- 【C++】运算符重载
- C++--------------------------------------------运算符重载
- C#:运算符重载
- C++:运算符重载
- C++:运算符重载
- C#:运算符重载
- [C++]运算符重载
- 【c++】运算符重载
- Linux文件管理之创建、删除、切换、权限
- 监听器综合案例
- C#小项目:模拟超市收银系统
- Oracle Sales cloud -Configuring Sales Organization(配置销售组织)
- MFC界面换肤美化
- C++--异常处理遇上运算符重载
- C++ Primer课后练习10.29-10.33
- UIButton和UIImageView 区别
- ArrayList去除重复元素(复习1)
- CS131-PA2 通过聚类实现前/背景分离 Foreground-Background Segmentation via Clustering
- 分享下,我所知道的JSP
- ISCE安装过程记录
- 在Linux系统中访问 windows系统中共享的文件夹
- LinkedList 单向链表