C++中,内联是在编译阶段,构造和析构是在运行阶段。那么如果对子类的构造函数内联,在调用子类的构造函数时,是否会同时将父类的构造函数内联呢? 侯捷的书推荐构造和析构不要内联,因为会调用父类的函数,代码比看起来更复杂
应该是不会的。这个你看下生成的机器码
如果基础类和衍生类定义了相同名称的成员函数,那么通过对象指针调用成员函数时,到底调用那个函数要根据指针的原型来确定,而不是根据指针实际指向的对象类型确定。同时,父类指针可以指向子类指针,而子类指针不能指向父类(可以C风格强转得到)。
虚函数重写(覆盖)的实质就是复刻一张父类虚函数表,并根据内部实现修改表中对应虚函数的地址;
当父类指针指向子类对象时,可以调用父类的所有东西,因为这些都被继承了;但是对于父类中的虚函数,其仍会调用子类的重载函数,因为此时被继承的虚函数指针指向的虚函数表已经被换成了子类的虚函数表
当子类指针指向父类对象时,可以调用子类继承父类的东西,但是不能调用子类自身的东西(因为没有,所以通常不允许这种情况发生),对于虚函数同上,此时指向的内存中的虚函数表仍为父类的虚函数表
4. 模板相关