![](/img/trans.png)
[英]Is there any difference between default built-in constructor and non-parameterized user-created default constructor?
[英]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.