簡體   English   中英

非參數化構造函數的目的是什么?

[英]What is the purpose of a non-parameterized constructor?

在非參數化構造函數中初始化類的數據成員有什么好處嗎? 比如,如果它不帶參數,在非參數化構造函數中初始化類數據成員不像直接在類中初始化值? 例子:

class persons {
 private:
   int age, id;
public:
 persons(){
   age = 2;
   id = 3;
 }
};

--> 我們也可以:

class persons {
 private:
   int age = 2, id = 3;
};

那么,默認構造函數的目的是什么?

在舊的 C++ 版本中,類中的屬性聲明不能包含初始化。 說法不一

class persons {
    int age = 3;
}

不正確,成員只能在構造函數中接收值。

但是初始化賦值還是有區別的。 對於原始類型無關緊要,但將為用戶定義的類使用不同的特殊成員。

例子:

#include <iostream>

// dummy class displaying messages for initializations and assignment
class A {
    int val;

public:
    A(int x = 0) : val(x) {  // initializing constructor
        std::cerr << "Construction from " << x << "\n";
    }
    A& operator =(int x) {  // assignment operator
        val = x;
        std::cerr << "Assignment from " << x << "\n";
        return *this;
    }
};

// 3 classes showing various "initialization" methods
class B {
    A a = 2;     // initialization with an implicit default CTOR
};

class C {
    A a;

public:
    C() : a(3) {};   // initialization
};

class D {
    A a;         // default initialization

public:
    D() {
        a = 4;   // assignment
    }
};

int main() {
    B b;
    C c;
    D d;
    return 0;
}

輸出確實是:

Construction from 2
Construction from 3
Construction from 0
Assignment from 4

成員聲明中的特殊初始化在所有構造函數(無論是隱式的還是顯式的)之間共享,並在構造函數的主體之前應用。 在任何情況下,成員的初始化都按其聲明的順序應用。

暫無
暫無

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

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