簡體   English   中英

類什么時​​候不包含構造函數?

[英]When does a class not contain a constructor?

我是C ++的新手,但對其他語言有一般的了解。 最近我看過一些關於C ++的教程,我有時看到的類沒有自己的構造函數,甚至沒有className(); 這可能也存在於其他語言中,但我以前從未見過它。 我不認為我之前已經看過它們,所以我的問題是:它們適用於什么? 他們是什么? 我試過谷歌搜索這個,但我不知道它的名字..'無構造類'並沒有給我太多。

沒有構造函數,是否可以實例化它? 或者它更像是一個靜態的東西? 如果我有一個包含整數但沒有構造函數的類,我可以去int i = myClass.int; 或類似的東西? 你如何訪問無構造函數的類?

如果沒有顯式聲明構造函數,那么編譯器會為您提供零參數構造函數。 *

所以這段代碼:

class Foo {
};

與此代碼相同:

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


*除非在這不起作用的情況下,例如,類包含需要初始化的引用或const成員,或者從沒有默認構造函數的超類派生。

如果沒有指定構造函數,則編譯器會為您生成默認構造函數(不帶參數的構造函數和復制構造函數)。 所以沒有無構造類的東西。 您可以使構造函數無法訪問,以控制何時以及如何創建類的實例,但這是一個不同的故事。

沒有構造函數的類是實現接口的好模型。

許多接口由方法組成,沒有數據成員,因此無需構建。

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;
};

上面的類被稱為抽象類。 它不是要有任何功能,而是要定義一個接口。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM