C++学习 对象模型之浅谈默认构造方法

相信对C++有过了解的人都知道,类的默认构造方法。就是当定义一个类时,有时编译器会给类添加一个默认的构造方法。那么疑问来了,什么情况下编译器会给类添加默认构造方法,这些构造方法具体做了什么操作?下面来探讨一下:

1.类里面有类成员数据,且类成员有构造方法

class A{

public:

A(){}

int a;

};

class B{

public:

    int b;

    A aa;

};

B b;

此时编译器会给B类添加默认构造函数,且这个构造函数会调用A的构造函数;因为当实例化B对象时,类成员aa也需要被实例化,需要调用构造方法。如果编译器不给B添加这样的构造方法,那么A的构造方法将不会被调用,显然不合理。

2.类成员函数含有虚函数

class A{

public:

int a;

virtual void fun1(){

cout<<"this is virtual function"<<endl

}

};

对于这样的类A,编译器也会添加默认构造方法,为什么呢?上节已说过,类对象内存空间只有非静态数据成员和虚函数指针,如果一个类有虚函数那么这个类一定会有一个虚函数指针来指向虚函数表。那么这个虚函数指针就是在构造方法中产生。

3.父类含有构造方法

class A{

public:

A(){}

int a;

};

class B:A{

public:

int b;

};

此时对于B类编译器会添加一个没有参数的默认构造方法,这个构造方法会调用A的构造方法。

 

4.类中含有虚基类

 

class Base{

public:
    int m_base_i;

};

class Derived1:virtual Base{

};

class Derived2:virtual Base{

};

class A:public Derived1,public Derived2{

 

};

这里实例化A会调用默认构造函数,对虚基类表指针进行赋值,通过虚基类来访问基类成员。

 

 

 

 

 

 

 

 

 

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值