-
编译器在执行过程中遇到virtual关键字的时候,将自动安装动态联编需要的机制,首先为这些包含virtual函数的类(注意不是类的实例)--即使是祖先类包含虚函数而本身没有--建立一张虚拟函数表VTABLE。在这些虚拟函数表中,编译器将依次按照函数声明次序放置类的特定虚函数的地址。同时在每个带有虚函数的类中放置一个称之为vpointer的指针,简称vptr,这个指针指向这个类的VTABLE。 一般来说一个对象的大小为所有成员变量的大小,但是当存在虚函数的时候即使这个类没有任何成员变量,他的对象的大小也不为0,为一个虚函数指针的大小。 当定义父类的一个函数为虚函数时,在子类中重载这个函数,用一个父类指针指向子类对象,并调用该函数的时候,调用的是子类的函数而不是父类的。如果父类中这个函数不是虚函数的话,调用的就是父类的函数了。查看全部
-
当try内的某一段抛出了异常,则下面的代码得不到运行,直接进入catch查看全部
-
Flyable *p=new Bird(); cout<<type(p).name()<<endl; 打印出:class Flyable * cout<<tupe(*p).name()<<endl; 打印出:class Bird查看全部
-
利用typeid(i).name()查出变量i的类型查看全部
-
接口类的定义查看全部
-
切记输入了中文字符;查看全部
-
从四分四十八秒开始看查看全部
-
抽象类的定义:含有纯虚函数的类叫做抽象类 抽象类无法实例化对象 抽象类的子类也可能是抽象类 当把抽象类的所有纯虚函数都做了实现,抽象类的子类才可以实例化对象查看全部
-
纯虚函数在虚函数表中的内容为0,查看全部
-
纯虚函数无函数体,等于0查看全部
-
产生虚函数列表指针后,该指针在内存中的位置跑到原有的数据成员的位置前面了查看全部
-
产生虚函数列表指针后,该指针在内存中的位置跑到原有的数据成员的位置前面了查看全部
-
int *p=(int *)&shape将Shape类型的地址转化成int类型的地址查看全部
-
当在父类中定义了虚析构函数,那么在父类中的虚函数表中就会有一个父类析构函数的函数指针,而在子类中虚函数表中就也会产生一个子类的析构函数的函数指针,指向的是子类的析构函数查看全部
-
理论前提: 执行完子类的析构函数就会执行父类的析构函数;查看全部
举报
0/150
提交
取消