用异常处理错误信息–继承在异常中的应用
思路:
定义一个异常基类,定义两个派生出来的两个异常类,然后在发生异常时抛回一个异常类的对象,再在catch中用父类对象引用来接,再用父类引用对象调用异常类中what函数(此处发生了多态)
代码:
#define _CRT_SECURE_NO_WARNINGS
#include<iostream>
using namespace std;
class BaseMyException {
public:
virtual void what() = 0; //打印错误信息的 纯虚函数
virtual ~BaseMyException(){}
};
class TargetSpaceNullException :public BaseMyException {
public:
virtual void what() {
cout << "目标空间为空" << endl;
}
virtual ~TargetSpaceNullException() {}
};
class SourceSpaceNullException :public BaseMyException {
public:
virtual void what() {
cout << "源空间为空" << endl;
}
virtual ~SourceSpaceNullException() {}
};
void copy(char* target, char* source) {
if (target == NULL) {
throw TargetSpaceNullException(); //调用了无参构造
}
if (source == NULL) {
throw SourceSpaceNullException(); //调用了无参构造
}
while (*source != '\0') {
*target = *source;
target++;
source++;
*target = '\0'; //注意不要忘了给复制后的字符串数组加上结束符
}
}
int main() {
char buf[] = "jakefuck";
char aim[1024] = {0}; //如果不初始化为0,那么如果没有复制成功,那么在最下面输出aim时会乱码!
try {
copy(aim, buf);
}
catch (BaseMyException& tp) { //此处采用的是捕获引用法 而且捕获的是父类引用,以发生多态
tp.what();
}
cout << aim << endl;
system("pause");
return 0;
}