什么时候类不包含构造函数? 我对C++很陌生,但对其他语言有一定的了解。最近我看到了一些关于C++的教程,我有时看到没有自己的构造函数的类,甚至没有CalpNoD;这可能也存在于其他语言中,但我以前从未见过。我想我以前也没见过它们在使用,所以我的问题是:它们是干什么用的?它们是什么?我试着用谷歌搜索这个,但我不知道它的名字“无构造器类”并没有给我太多

什么时候类不包含构造函数? 我对C++很陌生,但对其他语言有一定的了解。最近我看到了一些关于C++的教程,我有时看到没有自己的构造函数的类,甚至没有CalpNoD;这可能也存在于其他语言中,但我以前从未见过。我想我以前也没见过它们在使用,所以我的问题是:它们是干什么用的?它们是什么?我试着用谷歌搜索这个,但我不知道它的名字“无构造器类”并没有给我太多,c++,constructor,C++,Constructor,如果没有构造函数,是否可以实例化它?还是更像是一个静态的东西?如果我有一个包含整数但没有构造函数的类,我可以使用int I=myClass.int;或者类似的?如何访问无构造函数类?如果未显式声明构造函数,编译器将为您提供零参数构造函数* 所以这个代码: class Foo { }; class Foo { public: Foo() {}; }; 与此代码相同: class Foo { }; class Foo { public: Foo() {}; }; *除非在这

如果没有构造函数,是否可以实例化它?还是更像是一个静态的东西?如果我有一个包含整数但没有构造函数的类,我可以使用int I=myClass.int;或者类似的?如何访问无构造函数类?

如果未显式声明构造函数,编译器将为您提供零参数构造函数*

所以这个代码:

class Foo {
};
class Foo {
public:
    Foo() {};
};
与此代码相同:

class Foo {
};
class Foo {
public:
    Foo() {};
};

*除非在这种情况下不起作用,例如,类包含需要初始化的引用或常量成员,或者派生自没有默认构造函数的超类。

如果没有显式声明构造函数,则编译器将为您提供零参数构造函数*

所以这个代码:

class Foo {
};
class Foo {
public:
    Foo() {};
};
与此代码相同:

class Foo {
};
class Foo {
public:
    Foo() {};
};

*除非在这种情况下不起作用,例如,类包含需要初始化的引用或常量成员,或者派生自没有默认构造函数的超类。

如果不显式指定构造函数,编译器将为您的构造函数生成默认构造函数,而不带参数和复制构造函数。所以不存在无构造函数类。您可以使构造函数不可访问,以控制创建类实例的时间和方式,但这是另一回事。

如果您不显式指定构造函数,编译器将为您的构造函数生成默认构造函数,而不带参数并复制构造函数。所以不存在无构造函数类。您可以使构造函数不可访问,以控制创建类实例的时间和方式,但情况不同。

没有构造函数的类是实现接口的良好模型

许多接口由方法组成,没有数据成员,因此没有任何可构造的内容

class Field_Interface
{
  public:
    // Every field has a name.
    virtual const std::string&  get_field_name(void) const = 0;

    //  Every field must be able to return its value as a string
    virtual std::string         get_value_as_string(void) const = 0;
};

上面的类被称为抽象类。它不是要有任何功能,而是要定义一个接口。

没有构造函数的类是实现接口的好模型

许多接口由方法组成,没有数据成员,因此没有任何可构造的内容

class Field_Interface
{
  public:
    // Every field has a name.
    virtual const std::string&  get_field_name(void) const = 0;

    //  Every field must be able to return its value as a string
    virtual std::string         get_value_as_string(void) const = 0;
};

上面的类被称为抽象类。它不是要有任何函数,而是要定义一个接口。

您可以搜索隐式构造函数。另请参见,您可以搜索隐式构造函数。也请看,谢谢!关于最后一部分,您是说从没有显式构造函数的超类派生的类必须有显式构造函数,还是说它与Foo{}不同;因为它不能有显式构造函数?@Rheven:我是说,如果超类没有默认构造函数,那么子类需要显式调用特定的构造函数。编译器不知道怎么做,所以它不能为您提供子类构造函数。我不知道这意味着什么显式调用特定构造函数“?因此,如果超类没有显式构造函数,则子类需要类似于public:subclass{};的内容;。我找不到任何地方能读到这方面的资料。。尝试搜索“隐式构造函数c++的子类”,但只找到了相反的问题和答案。@OliCharlesworth:如果你要这样解释默认构造函数,我认为如果你展示/提到复制构造函数/移动赋值/析构函数会更好/etc@Rheven:可以在编译器不为您生成默认构造函数的情况下生成类。如果另一个类派生自这样一个没有默认构造函数甚至没有自动构造函数的类,那么派生类也将没有自动默认构造函数。谢谢!关于最后一部分,您是说从没有显式构造函数的超类派生的类必须有显式构造函数,还是说它与Foo{}不同;因为它不能有显式构造函数?@Rheven:我是说,如果超类没有默认构造函数,那么子类需要显式调用特定的构造函数。编译器不知道怎么做,所以它不能为您提供子类构造函数。我不知道这意味着什么显式调用特定构造函数“?因此,如果超类没有显式构造函数,则子类需要类似于public:subclass{};的内容;。我找不到任何地方能读到这方面的资料。。尝试搜索隐式构造函数C++的子类
“,但只有相反的问题和答案。@OliCharlesworth:如果你打算这样解释默认构造函数,我认为最好是你展示/提到复制构造函数/移动赋值/析构函数/etc@Rheven:可以在编译器不为您生成默认构造函数的情况下生成类。如果另一个类派生自这样一个没有默认构造函数甚至没有自动构造函数的类,那么派生类也将没有自动默认构造函数。这个类仍然有一个构造函数。这个类仍然有一个构造函数。但是可以显式删除所有构造函数,也可以显式删除所有构造函数,或者将它们都设置为私有。