第一种是类成员中有成员是类对象,并且该成员的类含有默认构造函数,那么C++编译器会帮你给这个类也生成一个默认构造函数,用来调用其成员对象的构造函数,完成该成员的初始化构造。需要强调的是,如果这个成员的类也没有给出默认构造函数,那么C++编译器也不会帮你生成该类的默认构造函数。

        第二种情况是这个类的基类有默认构造函数。那么C++编译器也会帮你生成该派生类的默认构造函数,以调用基类的默认构造函数,完成基类的初始化。另外还得强调一下的是,如果基类没有提供这个默认构造的函数,那么C++编译器也不会为派生类生成默认的构造函数(这里包括两层意思,第一,基类没有任何形式构造函数;第二,基类存在其他形式的非默认构造函数,当然了,这种类型就是编译不过的,道理很明显)。

        第三种情况是类中存在虚函数,那么C++编译器会为你生成默认构造函数,以初始化虚表(虚函数表vftable)。

       第四种情况是存在虚基类,那么C++编译器会为你生成默认构造函数,以初始化虚基类表(vbtable)。

       下面的例子中,就是因为基类A中没有提供默认构造函数,导致编译无法通过,为基类A添加上默认的构造函数后,编译就通过了。。

#include "iostream"
using namespace std;
class A
{
public:  A() { }   //基类添加上默认构造函数就可以了  A(int c)  {  x=c;  cout<<"A"<<endl;  }  void fun()  {  cout<<"in A fun"<<endl;  }
private:  int x;
};  class B:public A
{
public:  B(int c)  {  y=c;  cout<<"B"<<endl;  }  void fun()  {  cout<<"in B fun"<<endl;  }
private:  int y;
};
int main(void)
{  A *a=new B(2);  system("pause");  return 0;
} 

C++编译器何时为用户提供默认构造函数相关推荐

  1. 2020-12-18(何种情况下编译器会提供默认构造函数)

    当问到大家什么时候会提供默认构造函数时,有的人会不会一下子就想到当我们没有定义构造函数的时候,它就会提供默认的构造函数,但我们想想一个问题,假如没有意义的情况下提供了默认构造函数,那是不是把编译器搞得 ...

  2. C++编译器会对没有构造函数的类生成默认构造函数吗?

    之前在上C++的课的时候,印象中有那么一句话: 如果一个类没有任何构造函数,那么编译器会生成一个默认的构造函数 今天在看<深度探索C++对象模型>的第二章:"构造函数语意学&qu ...

  3. C++默认构造函数的合成

    默认构造函数的误解 1.当程序猿定义了默认构造函数,编译器就会直接使用此默认构造函数 来一个简单的栗子 class Student; class School { public: School(){} ...

  4. 类的构造函数和析构函数、默认构造函数

    前言 程序只能通过成员函数来访问数据成员,因此需要设计合适成员函数,才能成功地将对象初始化. 类构造函数专门用于构造新对象,将值赋给他们的数据成员,进行初始化. 构造函数名称与类名相同,没有返回值,没 ...

  5. Java默认构造函数的作用

    Java默认构造函数的作用,有需要的朋友可以参考下. class Person{private String name="";private int age=0;public Pe ...

  6. c++ 虚函数_到底什么情况下会合成默认构造函数?

    来源:https://www.cnblogs.com/QG-whz/p/4676481.html 作者:good luck 编辑:公众号[编程珠玑] 编辑注:没有构造函数的时候编译器一定会生成默认构造 ...

  7. C++默认构造函数的一点说明

    大多数C++书籍都说在我们没有自己定义构造函数的时候,编译器会自动生成默认构造函数.其实这句话我一直也是 深信不疑.但是最近看了一些资料让我有了一点新的认识. 其实我觉得大多数C++书籍之所以这样描述 ...

  8. C++学习——默认构造函数

    默认构造函数在这篇博客中已经写得很明白. https://blog.csdn.net/bear_n/article/details/72798301 文章目录 1.什么是默认构造函数? 2.什么情况会 ...

  9. C++ 合成默认构造函数的真相

    http://www.cnblogs.com/QG-whz/p/4676481.html 对于C++默认构造函数,我曾经有两点误解: 类如果没有定义任何的构造函数,那么编译器(一定会!)将为类定义一个 ...

最新文章

  1. Scrapy框架的入门使用
  2. python 笔记:if __name__==‘main’
  3. springcloud 服务与服务之间实现灰度发布 基于Aspect
  4. [HNOI2010]BOUNCE 弹飞绵羊
  5. 【ArcGIS Pro微课1000例】0014:两种坐标系全国1km分辨率DEM下载地址(WGS84+Albers投影)
  6. [Swift]LeetCode1035.不相交的线 | Uncrossed Lines
  7. pthread_attr_init线程属性
  8. 10个简单步骤,完全理解SQL
  9. C++ 沉思录——Chap4:设计类的核查表
  10. python中的range与xrange
  11. Python+OpenCV:图像对比度受限自适应直方图均衡化(CLAHE, Contrast Limited Adaptive Histogram Equalization)
  12. centos7 firewalld
  13. Python中终端彩色打印输出
  14. 二维联合分布(X,Y)求(U,V)
  15. 如何在金蝶服务器增加用户,详解金蝶KIS记账王如何新增用户
  16. CATIA软件有限元分析功能详解及使用教程
  17. LDC1101 LDC1314 LDC1614 1612 线圈感应测试(PCB+源码)
  18. 第一篇:wine介绍
  19. 磁盘介质受写入保护解决办法
  20. Infor和C3 AI建立战略合作伙伴关系,提供可扩展的企业AI行业应用

热门文章

  1. 傻瓜式操作Nagios图解
  2. ElasticSearch 组合过滤器
  3. Linux基础命令(3)
  4. Github连击200天(1)——ShowCase
  5. 合理规划您的硬盘分区
  6. hadoop快速入门之DKH安装准备
  7. 阿里小邮局黑科技 这就是传说中“别人的公司”
  8. 如何让squid实现动态缓存
  9. 参加51CTO学院软考培训,我通过啦!
  10. ActivityRouter