簡體   English   中英

課程組成

[英]Composition of classes

為什么在設置類組合時,可以使用默認構造函數調用包含的類,但不能使用帶參數的類調用?

那有點令人困惑; 讓我舉一個例子。

#include "A.h"
class B
{
private:
    A legal; // this kind of composition is allowed
    A illegal(2,2); // this kind is not.
};

假設存在默認構造函數和存在2個整數的構造函數,則只允許其中一個。 為什么是這樣?

這是肯定的,但你只需要以不同的方式編寫它。 您需要為復合類的構造函數使用初始化列表:

#include "A.h"

class B
{
private:
    A legal; // this kind of composition is allowed
    A illegal; // this kind is, too
public:
    B();
};

B::B() :
    legal(), // optional, because this is the default
    illegal(2, 2) // now legal
{
}

您可以提供構造函數參數,但是您錯誤地初始化了您的成員。

#include "A.h"

class B
{
private:
    int x = 3; // you can't do this, either
    A a(2,2);
};

這是你的解決方案, ctor-initializer

#include "A.h"

class B
{
public:
    B() : x(3), a(2,2) {};
private:
    int x;
    A a;
};

類聲明不會初始化組成該類的成員。 因此,當您嘗試在聲明中構建對象時出現錯誤。

成員初始化發生在類的構造函數中。 所以你應該寫:

#include "A.h"
class B
{
public:
    B();
private:
    A a;
};

B::B() : 
    a(2,2)
{
}

暫無
暫無

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

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