簡體   English   中英

在其他類構造函數中使用參數化構造函數

[英]use parameterized constructor in other classes constructor

我擔心這是一個非常基本的問題,然而,我還沒能解決它。

我有一個class A

// classA.h
...

class ClassA {
    public:
        ClassA();
        ClassA(int foo);
    private:
        int _foo;

    ...

}

// classA.cpp

ClassA::ClassA() {
    _foo = 0;
}

ClassA::ClassA(int foo) {
    _foo = foo;
}

...

第二個class B在構造函數中使用class A的實例:

// classB.h
...

#include "classA.h"

#define bar 5

class ClassB {
    public:
        ClassB();
    private:
        ClassA _objectA;

    ...

}

// classB.cpp

ClassB::ClassB() {
    _objectA = ClassA(bar);
}

...

請注意,從不使用class A的默認構造函數。 事實上,在我的真實世界用例中,使用任何類型的默認構造函數都沒有意義,因為必須動態分配_foo

但是,如果我刪除默認構造函數,編譯器將返回錯誤:

調用'ClassA :: ClassA()'沒有匹配函數

有沒有辦法在class B使用class A的實例作為對象而不為class A定義默認構造函數? 怎么做?

使用ClassA的默認構造函數。 使用它初始化ClassB_objectA然后為其分配ClassA(bar)

您可以使用構造函數初始化列表來解決您的問題:

ClassB::ClassB() : _objectA(bar)
{}

寫吧

ClassB::ClassB() :  _objectA(bar)
{
}

問題是當執行ClassB的構造函數的主體時,數據成員_objectA已經構造並且在主體內部使用了復制賦值運算符

ClassB::ClassB() {
    _objectA = ClassA(bar);
   ^^^^^^^^^^^^^^^^^^^^^^^^
}

因此,您可以刪除ClassA的默認構造函數。

暫無
暫無

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

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