-
接口类可以被继承,不能实例化查看全部
-
#include <iostream> #include <string> #include <stdlib.h> using namespace std; /** * 定义函数division * 参数整型dividend、整型divisor */ int division(int dividend, int divisor) { if(0 == divisor) { // 抛出异常,字符串“除数不能为0” throw string("除数不能为0"); } else { return dividend / divisor; } } int main(void) { int d1 = 0; int d2 = 0; int r = 0; cin >> d1; cin >> d2; // 使用try...catch...捕获异常 try { division(d1, d2); } catch(string &s1) { cout << s1 << endl; } return 0; }查看全部
-
异常:程序运行期出现的错误 对有可能发生异常的地方做出预见性的安排。 try...catch...:尝试...捕获... throw:抛出异常 目的:主逻辑与异常处理逻辑分离。 例如: void fun1() { throw 1; //抛出异常 } int main(void) { try { fun1(); //尝试 } catch(int) //捕获异常 { .... } return 0; } 常见的异常: 1.数组下标越界。 2.除数为0。 3.内存不足。(越来越少见了,但也偶尔会出现)查看全部
-
若两个类是继承和被继承关系,记得定义析构函数时定义为“虚析构函数”查看全部
-
#include <iostream> #include <stdlib.h> #include <string> using namespace std; /** * 定义移动类:Movable * 纯虚函数:move */ class Movable { public: virtual void move(void) = 0; }; /** * 定义公交车类:Bus * 公有继承移动类 * 特有方法carry */ class Bus : public Movable { public: virtual void move() { cout << "Bus -- move" << endl; } void carry() { cout << "Bus -- carry" << endl; } }; /** * 定义坦克类:Tank * 公有继承移动类 * 特有方法fire */ class Tank : public Movable { public: virtual void move() { cout << "Tank -- move" << endl; } void fire() { cout << "Tank -- fire" << endl; } }; /** * 定义函数doSomething含参数 * 使用dynamic_cast转换类型 */ void doSomething(Movable *obj) { obj->move(); if (typeid(*obj) == typeid(Bus)) { Bus *bus = dynamic_cast<Bus *>(obj); bus->carry(); } if (typeid(*obj) == typeid(Tank)) { Tank *tank = dynamic_cast<Tank *>(obj); tank->fire(); } } int main(void) { Bus b; Tank t; doSomething(&b); doSomething(&t); return 0; }查看全部
-
必须存在虚函数的亲子继承关系,方可。查看全部
-
(1)dynamic_cast只能转“ 指针和引用 ”并且在转换的类型中必须包含有虚函数,转换成功返回子类的地址,失败返回的是NULL。 (2)typeid(p) 和typeid( *p)不同。查看全部
-
RTTI:typeid(*父类指针) dynamic_cast注意事项: 1.必须只能应用于指针和引用的转换。 2.要转换的类型中必须包含虚函数。 3.转换成功则返回子类对象的地址,否则返回NULL。 typeid注意事项: 1.type_id返回一个type_info对象的引用。 2.如果想通过基类的指针获得派生类的数据类型,基类必须带有虚函数。 3.只能获取对象的实际类型。查看全部
-
typeid注意事项查看全部
-
typeid注意事项查看全部
-
dynamic_cast注意事项:查看全部
-
catch(引用)可以输出错误代码,catch(int &e){ cout << e << endl; } 也可以 throw 一个类,然后就可以在 catch 中调用这个类的成员函数,如果继承了父类,还可以调用到父类的成员函数(方法是[::]来写是父类下的成员函数),通过对父类的成员函数加上 virtual 变成虚函数,在子类继承父类的时候,如果实例化父类类型的子类对象时,就可以调用到子类的成员函数。catch 中写上父类类型因为继承而存在 isA 的关系,就可以传入子类对象或者父类对象 try 可以对应多条 catch 说的是一个错误出现的原因可能有多个查看全部
-
异常:程序运行期间出现的错误 异常处理:对有可能发生异常的地方做出预见性的安排 关键字:`try...catch...` 和 `throw`查看全部
-
typeid注意事项查看全部
-
dynamic_cast注意事项查看全部
举报
0/150
提交
取消