vptr指针的分部初始化
2018-01-14 18:10
190 查看
//#include "stdafx.h" #include <iostream> using namespace std; class Animal { public: Animal(string _name) :name(_name) { test(); //执行哪个函数? } virtual void test() { cout << "父类test函数调用" << endl; } virtual ~Animal() { cout << "~Animal" << endl; } protected: string name; }; class Mouse : public Animal { public: Mouse(string _name, bool _sex) : Animal(_name), sex(_sex) {} virtual void test() { cout << "子类test函数调用" << endl; } virtual ~Mouse() { cout << "~Mouse" << endl; } protected: bool sex; }; void Pause() { Mouse m("Aem", 2); } int main() { Pause(); system("pause"); return 0; } /* 虽然在定义子类对象,但仍执行父类的test()函数, 执行父类构造函数时,vptr指针指向父类虚函数表, 执行子类构造函数时,vptr指针指向子类虚函数表, 对象在创建的时,由编译器对VPTR指针进行初始化 只有当对象的构造完全结束后VPTR的指向才最终确定 父类对象的VPTR指向父类虚函数表 子类对象的VPTR指向子类虚函数表 */
相关文章推荐
- C/C++—— 在构造函数中调用虚函数能实现多态吗(Vptr指针初始化的过程分析)
- 子类的vptr指针是分步初始化的_多态相关面试
- 结构体成员和结构体指针初始化
- 二级指针初始化
- 【转】vtbl(虚函数表)与vptr(虚函数表指针)
- C++中空类的大小和类的虚表指针(vptr)
- 空指针和未初始化的指针的区别
- 【错误记录】二维数组初始化,以二级指针传递函数参数
- 初始化:普通数组 vs 指针数组 => sizeof, memset
- C++基础7【难】 多态:实现原理 vptr指针 证明vptr存在 类的步长 纯虚函数:抽象类 案例 【面试题】
- C语言指针问题,初始化,赋值,以及字符数组,字符串常量等问题
- 关于声明指针初始化问题
- 第一篇 理解“引用初始化以后不能被改变 指针可以改变所指的对象”这句话
- C语言指针的初始化和赋值
- (摘自C Primer)千万别解引用未初始化的指针
- 字符指针的初始化以及程序分析实例
- 关于全局变量的初始化问题与野指针
- C语言中指针的初始化和赋值
- C/C++数据结构中利用指针的三种初始化方式
- C语言指针的初始化和赋值