C++ primer 第15章 面向对象程序设计

  1. 构造函数为什么不能是虚函数?
    new一个对象1.开辟内存空间 2.编译器调用构造函数进行初始化,也就是实例化。在调用构造函数的时候,已经有了内存,只是没有实例化,而如果构造函数是虚的,就是说通过vtable来调用构造函数,但是此时是一片raw memory,根本找不到对象的vptr来指向vtable,所以这才是构造函数不能是虚的原因。另外补充一下,每个类有一个vtable,每个对象有一个vptr指向vtable,new多个对象的时候,进程地址空间只会保留一个vtable,所有对象共享一个vtable。

  2. 静态变量或静态函数会被继承吗?
    其会被继承,但是其在子类中的访问权限视情况而定(遵循通用的 访问控制规则),并且其是共享的,即该继承体系*享同一静态变量或静态函数。

上一篇:第三次作业(原型设计工具的使用)


下一篇:C++ primer 知识点部分(4-7章)