我是靠谱客的博主 疯狂巨人,最近开发中收集的这篇文章主要介绍C++中类的默认构造函数调用的时机1 不指定类对象的初始值时2 类本身含有类的对象且使用该类的默认构造函数时3 类本身含有类的对象且没有在构造函数中显式初始化该对象时,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

1 不指定类对象的初始值时

当不使用任何初始值定义一个类的非静态变量时,会调用该类的默认构造函数。

A a;

此时,会调用类A的默认构造函数。在《C++中类的合成默认构造函数2-1》https://blog.csdn.net/hou09tian/article/details/108072603中提到,如果类中没有显式地定义默认构造函数,则C++编译器会为其创造一个合成的默认构造函数,如果类中已经定义了其他格式的构造函数,此时C++编译器不会再为其合成默认构造函数。所以,如果此时类A的定义为

class A {
public:
A(int i){}
};

此时,程序会报错,报错信息为“error C2512: “A”: 没有合适的默认构造函数可用”。

2 类本身含有类的对象且使用该类的默认构造函数时

当类B含有类A的对象,并且使用类B的默认构造函数时,会调用类A的默认构造函数。

class A {
public:
A(int i){}
};
class B {
A m_a;
};

使用类B的默认构造函数来创建该类的对象

B b;

此时,会调用类B的合成默认构造函数,并调用类A的默认构造函数。因为类A没有默认构造函数,所以此时程序报错信息为“ error C2280: “B::B(void)”: 尝试引用已删除的函数”。

3 类本身含有类的对象且没有在构造函数中显式初始化该对象时

 

class A {
public:
A(int i){}
};
class B {
public:
B(int i){
}
A m_a;
};

此时,类B的构造函数没有显式地初始化类A的对象m_a,那么则需要调用类A的默认构造函数来初始化m_a,但是类A没有定义默认构造函数,因此,程序的报错信息为“ error C2512: “A”: 没有合适的默认构造函数可用”。

最后

以上就是疯狂巨人为你收集整理的C++中类的默认构造函数调用的时机1 不指定类对象的初始值时2 类本身含有类的对象且使用该类的默认构造函数时3 类本身含有类的对象且没有在构造函数中显式初始化该对象时的全部内容,希望文章能够帮你解决C++中类的默认构造函数调用的时机1 不指定类对象的初始值时2 类本身含有类的对象且使用该类的默认构造函数时3 类本身含有类的对象且没有在构造函数中显式初始化该对象时所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(77)

评论列表共有 0 条评论

立即
投稿
返回
顶部