在什么情况下系统会自动生成缺省(默认)的构造函数?

1、在类里面有一个类类型的对象,这个类有自己的缺省构造函数(有缺省的参数,参数有缺省值)。

class B

{

B(int data)

{  }

};不能合成

class B

{

B(int data=0)

{  }

};会合成

class B

{

public:

B(int data=0)

{  }

};

class C:public B

{

public:

C()

:B(0)

{  }

B b;  //编译器会自动合成

};

2、类是虚拟继承

class B

{

public:

B()

{}

};

class D:virtual public B

{

public:

D()

{ }

B b;

};

3、基类有缺省构造函数,子类没有显示定义自己的构造函数

class B

{

public:

B(int data=0)

{}

};

class D: public B

{

public:

};

4、有虚函数的类,系统自动生成缺省的构造函数来初始化虚指针

class B

{

public:

virtual  void fun()

{

cout << "fun" << endl;

}

};

前面是一些构造函数方面的总结,菜鸟一个写的太烂,进来的先凑合着看,会不定时补充,有错误的地方还请多多指点

****************************************************************************************

虚函数:

class Base

{

public:

virtual void FunTest()

{

cout << "Base::FunTest()" << endl;

}

virtual void FunTest1()

{

cout << "Base::FunTest1()" << endl;

}

virtual void FunTest2()

{

cout << "Base::FunTest2()" << endl;

}

virtual void FunTest3()

{

cout << "Base::FunTest3()" << endl;

}

virtual void FunTest4()

{

cout << "Base::FunTest4()" << endl;

}

};

int main()

{

Base b;

system("pause");

return 0;

}

Base b;

009253E8  lea         ecx,[b]

009253EB  call        Base::Base (0921226h)

有call命令说明编译器有合成缺省构造函数

取b的地址,b指向的那块空间里存放着另一个地址,该地址指向的空间存放着虚表地址

虚指针指向虚表

虚表的顺序和函数的声明顺序是一样的

虚函数的大小:

***************************计算大小*********************************

class C

{

public:

char a;  //1

static char b;  //静态成员在静态区域,不在栈区,所以不算

void *p;    //指针占4个字节

static int *c;   //静态成员在静态区域,不在栈区,所以不算

virtual void func1()

{}

virtual void func2()

{}

//虚函数属于同一类,故只需要一个这个指针指向虚函数表,

//占用4个字节,就算有N个虚函数,也是4个字节

};

int main()

{

C c;

cout << sizeof(C) << endl;    //12

cout << sizeof(c.a) << endl;    //1

cout << sizeof(c.b) << endl;   //1    类型的大小

cout << sizeof(c.c) << endl;    //4     类型的大小

cout << sizeof(c.p) << endl;    //4

return 0;

}

转载于:https://blog.51cto.com/10921020/1766287

如何理解虚表及其计算含虚函数的类的大小相关推荐

  1. 虚函数占用类空间大小(转)

    总结一下VPTR 和 VTABLE 和类对象的关系: 每一个具有虚函数的类都有一个虚函数表VTABLE,里面按在类中声明的虚函数的顺序存放着虚函数的地址,这个虚函数表VTABLE是这个类的所有对象所共 ...

  2. C++对象模型4——多重继承的对象内存模型、vptr与vtbl的创建与重置的时机、不要在含有虚函数的类的构造函数中调用memset

    一.多重继承的对象内存模型 class Base1 { public:virtual void f() {cout << "base1::f()" << e ...

  3. C++:用含成员函数的类来实现输入和输出时间。

    题目概述: 用含成员函数的类来实现输入和输出时间. 编程: #include < iostream> using namespace std; class Time //声明Time类 { ...

  4. C++中虚函数继承类的内存占用大小计算

    前半部分转自https://www.cnblogs.com/SeekHit/p/7570247.html 其中为32位字节对齐,后半部分给出自己的理解. 字节对齐的原理见链接https://www.c ...

  5. C++之菱形继承与虚继承(含虚函数)

    面向对象的三大特征:封装,多态,继承 前面我们已经讲了继承的一些知识点,在这基础上,我们讲的时候再涉猎一些多态的只是. 下面我们先接着上次讲有虚函数的菱形虚继承 首先什么是虚函数.? 虚函数:在类里面 ...

  6. 带虚函数的类的sizeof分析

    一个类中若有虚函数,(不论是自己的虚函数,还是继承而来的),那么类中就有一个成员变量:虚函数指针.虚函数指针占4字节 直接看例子: class base1{ private:int a; public ...

  7. 基类指针调用派生类函数_C++ 多态性:虚函数--基类与派生类类型转换(第7章 05)例子问题解析(学习笔记:第8章 05)...

    虚函数[1] 问题:还记得第7章的例子吗[2]? 例7-3 类型转换规则举例 #include <iostream> using namespace std; class Base1 { ...

  8. Unity2D学习笔记Day12:敌人统一死亡动画+Class的继承(含虚函数virtual,重写override)

    学习资源:B站 M_Studio<Unity教程2D入门>17 Unity Assets:Sunnyland Day12 调用frog死亡动画效果 这里我没有完全按照教程的方法,是自己写的 ...

  9. 中有atoi函数吗_C++ 多态的实现及原理,深挖vptr指针,手动调用虚函数

    什么是多态? 父类指针即根据指向的不同对象,响应同一消息(函数调用),产生不同行为. 多态三要素? 1,继承 2,虚函数重写 3,父类指针(引用)指向子类对象 多态的实现很简答,让我们来看一段代码 # ...

最新文章

  1. My deep learning reading list
  2. tomcat8配置tomcat-users.xml不生效
  3. Spring 数据访问那些事儿(一)spring + jdbc
  4. 从“等等”到“秒开”再到“直开”,是什么让闲鱼社区相见恨晚?
  5. 【Linux系统编程】进程同步与互斥:POSIX有名信号量
  6. LiveVideoStack线上交流分享 (九) —— B站的QUIC实践简介
  7. changePage() 页面跳转
  8. 一个权重的物体拷贝权重给多个(oneWeightToMany)
  9. 正则对字符串中手机号加密
  10. 2017CV技术报告:从3D物体重建到人体姿态估计
  11. python--弦图
  12. node.js 自定义类库_使用Node.js为您的桌面构建自定义照片小部件
  13. AMD新旗舰:短小精悍,干掉双芯卡
  14. 我的世界服务器内无限刷物品,我的世界怎么无限刷物品
  15. JavaScript详细版
  16. docker mysql redis 镜像详解
  17. ResNet论文翻译——中文版
  18. android 访问win10共享文件夹,win10系统用手机es文件浏览器访问共享文件的操作方法...
  19. 【规律】Cunning Friends
  20. 如何提高工作激情,打造狼性团队

热门文章

  1. JVM—GC垃圾收集器
  2. Android:解决Button中的文字全部大写
  3. jQuery同时监听两个事件---实现同时操控两个按键
  4. Linux0.11内核--加载可执行二进制文件之1.copy_strings
  5. 设置程序默认打开方式
  6. linux学习(7)-压缩与解压缩
  7. 大四实习有点晚[转载]
  8. 论文总结(negFIN: An efficient algorithm for fast mining frequent itemsets)
  9. python数据结构与算法之排序
  10. U盘的挂载和卸载(也可以查看指令篇)