异常接口声明:为了加强程序的可读性,可以在函数声明中列出可能抛出异常的所有类型 void func();则此函数可以抛任何类型的异常 void func() throw(A,B,C);这个函数func能够且只能抛出类型A,B,C及其子类型的异常 void func() throw();
父类指针指向子类空间所带来的问题:在没有虚函数的前提下,父类指针只能操作子类空间中的父类部分的数据,无法直接操作子类新增的数据
当编译器发现我们的类中有虚函数的时候,编译器会创建一张虚函数表,把虚函数的函数入口地址放到虚函数表中,并且在类中秘密增加一个指针,这个指针就是vpointer(缩写vptr),这个指针是指向对象的虚函数表。
注意:虚继承只能解决具备公共祖先的多继承所带来的二义性问题,不能解决没有公共祖先的多继承的,工程开发中真正意义上的多继承是几乎不被使用,因为多重继承带来的代码复杂性远多于其带来的便利,多重继承对代码维护性上的影响是灾难性的,在设计方法上,任何多继承都可以用单继承代替。
构造函数和析构函数用来处理对象的创建和析构操作,构造和析构函数只知道对它们的特定层次的对象做什么,也就是说构造函数和析构函数不能被继承,必须为每一个特定的派生类分别创建。