当前位置: 首页 > 编程笔记 >

对C++默认构造函数的一点重要说明

方奕
2023-03-14
本文向大家介绍对C++默认构造函数的一点重要说明,包括了对C++默认构造函数的一点重要说明的使用技巧和注意事项,需要的朋友参考一下

大多数C++书籍都说在我们没有自己定义构造函数的时候,编译器会自动生成默认构造函数。其实这句话我一直也是

深信不疑。但是最近看了一些资料让我有了一点新的认识。

其实我觉得大多数C++书籍之所以这样描述其实是玩了文字游戏的。如果说编译器自动产生的默认构造函数对于我们

的类没有任何作用,也就是说在编译器默认生成的这个构造函数里根本没有任何实质性的代码工作,那么这种默认构

造其实是可有可无的,所以不妨说编译器其实是为每个类生成了默认构造函数的。

在深度探索C++对象模型中讲了四种关于编译器自动生成默认构造函数的情况,在这四种情况下生成的默认构

造函数里面是由实质的隐含代码操作的:

1、 如果类A成员中含有某个类B的对象,恰好类B也显示定义了构造函数,那么在产生类A对象的时候编译器会产生一个默认构造函数,在这个默认构造函数中提供了调用类A构造函数的代码。


2、如果类B继承于类A,且类A显示定义了构造函数,那么在生成类B对象的过程中编译器同样会产生一个默认构造函数,在这个构造函数中提供调用基类A构造函数的代码


3、如果某个类含有虚函数,那么编译器会自动产生一个默认构造函数以提供虚表指针相关的初始化操作。


4、如果一个类虚继承于其他类,那么同样的编译器会为该类产生默认的构造函数。


除以上四种情况,编译器都不产生默认构造函数,因为就算编译器产生了默认构造函数,然而在该默认构造函数中没有实质的内容,那么这个默认构造函数也就是没存在的意义的,那么我们说编译器不产生也无妨吧。

以上就是小编为大家带来的对C++默认构造函数的一点重要说明全部内容了,希望大家多多支持小牛知识库~

 类似资料:
  • 本文向大家介绍解析C++中构造函数的默认参数和构造函数的重载,包括了解析C++中构造函数的默认参数和构造函数的重载的使用技巧和注意事项,需要的朋友参考一下 C++构造函数的默认参数 和普通函数一样,构造函数中参数的值既可以通过实参传递,也可以指定为某些默认值,即如果用户不指定实参值,编译系统就使形参取默认值。 【例】 程序运行结果为: 程序中对构造函数的定义(第12-16行)也可以改写成参数初始化

  • 问题内容: 除了* 使用如下所示的反射检查 之外 ,是否有任何方法 要求 类具有默认(无参数)构造函数?(以下方法可以工作,但是很hacky,反射速度很慢) * 问题答案: 您可以为此构建一个注释处理器。注释处理器是在编译时运行的编译器插件。它们的错误显示为编译器错误,甚至可能停止构建。 这是一个示例代码(尽管我没有运行它): 如果引入注释(例如RequiresDefaultAnnotation)

  • 问题内容: 默认构造函数到底是什么?你能告诉我以下哪个是默认构造函数,它与其他构造函数有何不同? 问题答案: 他们都不是。如果定义,则不是默认值。 除非你定义另一个构造函数,否则默认构造函数是自动生成的无参数构造函数。任何未初始化的字段都将设置为其默认值。对于你的榜样,它看起来像这样假设的类型String,int以及int,那类本身是公共的: 这与 完全没有构造函数。但是,如果定义至少一个构造函数

  • 我有如下三节课 二等 调用父类方法的最后一个类 PS:帖子标题可能有误。如果是错的,我会根据答案修改。

  • 问题内容: 我知道我在这里问一些严重的101问题… 我有一些课,还有一个延伸课。在我有一个构造函数,它接受一组参数,并对其字段进行设置。派生类(例如)通常不需要进行修改。现在我的IDE给我 “ Foo中没有默认的构造函数” 。从一点点谷歌搜索,这似乎是因为“构造函数没有继承”。因此,一切都很好,但是我现在如何使它工作而不在每个派生类中复制此构造函数?我假设有一个更合理的方法? 问题答案: 使用构造

  • 我的问题是关于OOP(C)中的构造函数。当我在一个类中将默认构造函数定义为private,并且在main中将该类的一个对象初始化为default时,就会出现默认构造函数不可访问的错误。这很好。但我也在Public部分中使用默认参数构造函数,当我再次在main中初始化对象时,就会出现对函数重载的不明确调用。所以我的问题是,如果不能从main访问私有构造函数,那么编译器应该调用公共部分中的构造函数,这

  • 问题内容: 不知何故,在下面的Node类中,and变量在Node的所有实例之间共享。 有什么办法可以让我继续使用构造函数参数的默认值(在这种情况下为空列表),但要同时获取它们和拥有其自身的变量以及变量? 我正在使用python 3.1.2。 问题答案: 可变的默认参数通常不会执行您想要的操作。相反,请尝试以下操作:

  • 为什么: 如果一个类不提供任何然后在编译时由编译器给出,但是如果一个类包含,那么默认构造函数不是由编译器提供。 我正在编译下面的代码。它给出了编译错误。 代码: 控制台错误: 当我只调用。工作正常。但是当您想使用参数化构造函数调用