首页 > 试题广场 >

如果没有为一个类定义任何构造函数的情况下,下列描述正确的是(

[单选题]
如果没有为一个类定义任何构造函数的情况下,下列描述正确的是(        )
  • 编译器总是自动创建一个不带参数的构造函数
  • 这个类没有构造函数
  • 这个类不需要构造函数
  • 该类不能通过编译
此时此刻,java工程师又和C++工程师走到了一起
发表于 2020-05-18 20:47:14 回复(0)
总体来说,只有A最合适。但是,A其实也是有点问题的,比如说当类X包含其他类成员Y时,而Y并并不能使用合成的构造函数,此时就不会创建一个不带参数的构造函数。
c++ primer 5th P236中指出:
如果类包含有内置类型或者复合类型的成员,则只有当这些成员全部被赋予了类内的初始值时,这个类才适合于使用合成的默认构造函数。
编辑于 2018-04-18 20:13:38 回复(0)
编译器为类自动合成构造函数有以下情况 1,有class1,class2,2中有1类型成员而2没有构造函数但1有,此时编译器会自动生成。2,在继承中,基类定义构造函数,而派生类没有定义,派生类会自动生成。3,在虚拟继承中自动生成构造函数用来填写偏移量表格地址。4,类中有虚函数,自动合成构造函数来初始化虚表
发表于 2017-08-16 09:51:18 回复(0)

其实编译器只有在必要的时候才会自动合成一个默认的构造函数:

  • 继承自一个基类,这个基类含有默认的构造函数

  • 含有类成员,这个类成员含有默认的构造函数

    class Base {
    public:
        Base(int i = 0) { }
    };
    
    class Derived {
        // 编译器会合成出一个默认的构造函数
    private:
        Base b;
    };
  • 含有virtual函数(无论是在基类还是派生类中)

  • 继承链中含有虚拟基类的类

发表于 2022-03-03 09:17:02 回复(0)
只能说是最佳选项! 编译器只有在需要构造函数的时候才会自动创建构造函数吧 
发表于 2017-07-22 19:45:27 回复(3)