-
dynamic_cast注意事项: 1、只能应用于指针和引用的转换 Bird *bird = new dynamic_cast<Bird*>(obj) 2、要转换的类型中必须包含虚函数 3、转换如果成功则返回子类的地址,失败返回NULL查看全部
-
在C++中异常处理通常使用try...catch...语法结构。一个try语句可以对应一个或多个catch语句,但不能没有catch语句。C++中使用throw抛出异常,通过catch捕获异常查看全部
-
常见的异常: 数组下标越界。除数为0,内存不足查看全部
-
typeid 和 dynamic_cast 用法实例查看全部
-
可以使用接口类指针指向其子类对象,并调用子类对象中实现的接口类中纯虚函数。 一个类可以继承一个接口类,也可以继承多个接口类。 一个类可以继承接口类的同时也继承非接口类。 接口类中仅有纯虚函数,不能含有其它函数,也不可以含有数据成员。查看全部
-
仅含有纯虚函数的类称为接口类。接口类也是抽象类,接口类可以被继承,但是不能被实例化查看全部
-
仅含有纯虚函数的类成称为接口类,成员函数都是纯虚函数查看全部
-
可以了查看全部
-
抽象类,含有纯虚函数的类; 抽象类无法实例化对象; 抽象类的子类有可能也是抽象类;查看全部
-
在C++中多态的实现是通过虚函数表实现的 当类中仅含有虚析构函数,不含其它虚函数时,也会产生虚函数表 每个类只有一份虚函数表,所有该类的对象共用同一张虚函数表 两张虚函数表中的函数指针可能指向同一个函数。查看全部
-
对象的大小:在类实例化对象中,它的数据成员占内存的大小,不包括成员函数 对象的地址:通过一个类实例化一个对象,这个对象在内存中会占用一定的内存单元,这个内存单元的第一个内存的地址就是对象的地址 对象成员的地址;通过一个类实例化一个对象,这个对象可能存在一个或多个数据成员,每一个成员所占的地址就是对象成员的地址 虚函数表指针:在具有虚函数的情况下,实例化一个对象的时候,这个对象的第一块内存当中存在一个指针,这个指针就是虚函数表的指针。查看全部
-
函数的覆盖:(多态) 如果我们没有在子类当中定义同名虚函数,那么在子类的虚函数表中就会出现父类的虚函数的入口地址,如果我们在子类当中也定义了与父类同名的虚函数,那么在子类的虚函数表中,原来父类虚函数的入口地址就会覆盖一下,覆盖成子类的虚函数的入口地址。查看全部
-
virtual可以修饰析构函数,也可以修饰普通的成员函数,但是也是有限制的: 1、virtual不能修饰普通的函数 (该函数必须某对象的成员函数,但是不能是全局函数) 2、virtual不能修饰静态成员函数 3、virtual不能修饰内联函数 4、virtual不能修饰构造函数查看全部
-
在进行对象的动态多态时,当子类继承父类时,子类的构造函数中构造一个指针成员,为一个指针申请内存,在构建子类对象时,使用父类指针构建子类对象,这样在析构的时候,只能释放父类的指针的内存,而不能释放子类中申请的指针内存,这样就会造成内存泄露。解决方法就是引用虚析构函数virtual+析构函数,将父类和子类的析构函数写成虚析构函数。查看全部
-
多态:是指相同的对象收到不同的消息或者不同的对象收到相同的消息时会产生不同的动作 静态多态(早绑定): class Rec { Rec(); recArae(int height); recArae(int height,int width); } int main() { Rec rec; rec.recArae(10);rec.recArae(10,20); } 这种情况就是系统会根据参数的不同来确定对象应该调用哪个函数,这就是静态多态(早绑定)。 动态多态(晚绑定):让相同的消息应用于不同的场合。给父类的成员函数加virtual让其成为虚函数,进而实现动态多态 class Base { public: virtual ~Base(){} virtual void fun(){cout<<"Base::fun"<<endl;} }; class Derived:public Base { public: virtual void fun(){cout<<"Derived::fun"<<endl;} }; main() { Base *pB=new Derived; //使用父类指针指向子类, pB->fun();//fun()是虚函数。 }查看全部
举报
0/150
提交
取消