[英]Object with parameterized constructor as parameter for another classes constructor
[英]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.