53)vptr指针的分布初始化

1)一个父类:
    

    

2)一个子类:

    

    

3)我的main函数内容

  

    

4)通过结果证明

    

    

那么产生了问题,这个print是一个虚函数,不应该  在  我的main函数中   通过调用pp->print,在print函数里面的那个print应该是 子类的啊,为啥是父类的?

   1)首先在我运行这个代码:

1 public:
2     Child(int a,int b):Parent(a)
3     {

    先执行  父类的 构造函数   也就是那个vptr存的是父类中虚函数表的地址

然后再执行

1 cout<<"Child(int,int)"<<endl;
2 this->b=b;

上面的这个代码是执行 子类的构造了,是填充 子类区别于 父类的那块内存:

  然后那个vptr由指向父类的  虚函数表  到指向子类的  虚函数表。

    

原文地址:https://www.cnblogs.com/xiaoyoucai/p/8277498.html

时间: 2024-10-31 02:54:29

53)vptr指针的分布初始化的相关文章

深入剖析C++多态、VPTR指针、虚函数表

在讲多态之前,我们先来说说关于多态的一个基石------类型兼容性原则. 一.背景知识 1.类型兼容性原则 类型兼容规则是指在需要基类对象的任何地方,都可以使用公有派生类的对象来替代.通过公有继承,派生类得到了基类中除构造函数.析构函数之外的所有成员.这样,公有派生类实际就具备了基类的所有功能,凡是基类能解决的问题,公有派生类都可以解决.类型兼容规则中所指的替代包括以下情况: 子类对象可以当作父类对象使用 子类对象可以直接赋值给父类对象 子类对象可以直接初始化父类对象 父类指针可以直接指向子类对

c++-多态和vptr指针

多态的原理 #define _CRT_SECURE_NO_WARNINGS #include <iostream> using namespace std; class Parent { public: Parent(int a) { this->a = a; } virtual void func(int a) { cout << "Parent::func(int)..." << endl; } virtual void func(int

&lt;24&gt;【掌握】二维数组指针定义、初始化+

[掌握]二维数组指针定义.初始化 数组指针: 定义一个指针变量,让这个指针变量指向一维数组的元素 二维数组指针 行指针,用来指向二维数组的每一行,存放的是行的首地址 定义格式: 数据类型 (*行指针变量名)[数组第二维的长度]; 二维数组指针的初始化 int a[2][3]; int b[2][2]; float f1[4][4]; //假设我要定义一个指向数组a的一个行指针 // a = &a[0] = &a[0][0] = a[0] int (*p)[3] = a; 二维数组指针的使用

指针数组的初始化

考虑这样一个问题:编写一个函数month_name(n),它返回一个指向第n个月名字的字符串的指针.这时内部static类型数组的一种理想的应用.month_name函数中包含一个私有的字符串数组,当它被调用时,返回一个指向正确元素的指针. 指针数组的初始化语法和前面所讲的其他类型对象的初始化语法类似: char *month_name(int n) { static char *name[]={ "Illegal month", "January","F

指针变量的初始化与应用

1.指针变量的初始化: 说明: 2.指针变量的应用: 3.与数组相关的问题: 4.指针的运算:

Swift3.0语言教程使用指针创建和初始化字符串

Swift3.0语言教程使用指针创建和初始化字符串 Swift3.0语言教程使用指针创建和初始化字符串苹果的Swift团队花了不少功夫来支持C的一些基础特性.C语言中为我们提供了指针,Swift也不例外,开发者可以使用指针去创建和初始化字符串. (1)在NSString中init(bytes:length:encoding:)方法可以从给定字符串按照指定获取方向,得到指定个数的字符,然后使用这些字符创建和初始化字符串.其语法形式如下: convenience init?(bytes: Unsaf

指针初级(定义, 初始化, 重指向, 注意事项)

大家好, 今天我们来学习C语言中的指针. 可能大家都听过这么一句话: C语言中其它我学得都很好, 就是指针这一块学得不是太明白, 那么你不如告诉我你没有学过C语言. 这么一句话突出了指针这个概念在C语言当中的重要性. 还有的同学说, 我听别从说C语言当中的指针好难, 特别难理解, 很难学会.那么我告诉大家的是, 指针没有什么难的地方, 那只是你们潜意识这么认为的, 通过今天这节课的学习, 我相信大家都能学会指针, 并且会用指针. 好, 下面开始指针的学习. 在学指针之前, 我先给大家普及一下,

53 指向指针的指针(多重指针)

1,指向指针的指针是一种多级间接寻址的形式,或者说是一个指针链,通常,一个指针包含以变量的地址,当我们定义一个指向指针的指针时,第一个指针包含了第二个指针的地址,第二个指针包含实际值的位置 2,①一个指向指针的指针变量必须如下声明,即在变量名前放置两个星号,例如,下面声明了一个指向 int 类型指针的指针: int**  pstr;  //pstr 的类型是 int** ②当一个目标值被一个指针间接指向另一个指针时,访问这个值需要使用两个星号运算符,比如 **pstr 3, 内存布局图:   

C++中多态

C++中多态的实现原理 当类中声明虚函数时,编译器会在类中生成一个虚函数表 虚函数表是一个存储类成员函数指针的数据结构 虚函数表是由编译器自动生成与维护的 virtual成员函数会被编译器放入虚函数表中 存在虚函数时,每个对象中都有一个指向虚函数表的指针(vptr指针) C++内存模型中,会将对象中的成员变量和成员方法分开存储,同时在成员函数中第一个参数的位置添加一个this指针. 类对象中的普通成员变量,struct变量具有相同的内存布局和字节对齐方式. 类对象中的静态成员变量,存储在全局数据