簡體   English   中英

C++ 何時會調用 object 上的構造函數,該 class 成員?

[英]When will C++ call the constructor on an object that is a class member?

假設我有一個 class

class MyClass {
    public:
        AnotherClass myObject;
};

我的問題是我想用 arguments 將 myObject 初始化為它的構造函數,就像我在 function 期間在堆棧上聲明它一樣

AnotherClass myObject(1, 2, 3);

但我想為構造函數中的 class 成員執行此操作:

MyClass::MyClass() {
    myObject = ...?
    ...
}

問題正是如此。 如果我聲明一個具有構造函數的 class 成員,C++ 會調用默認構造函數嗎? 如何仍然在 class 定義中聲明變量,但在構造函數中對其進行初始化?

感謝您的任何回答!

您可以使用初始化列表。

class MyClass {
    public:
        MyClass() : myObject(1,2,3){ }
        AnotherClass myObject;
};

使用ctor-initializer 成員在基類之后和構造函數主體運行之前被初始化。

MyClass::MyClass() : myObject(1,2,3) {
    ...
}
class A
{
public:
   A(int);
};

class B
{
public:
   B();

private:
   A my_a_;
};

// initialize my_a by passing zero to its constructor
B::B() : my_a_(0)
{
}

總是使用初始化列表:

MyClass::MyClass() :
  myObject( 1, 2, 3 )
{
  //myObject = don't do this, bad practice!
}

http://www.parashift.com/c++-faq-lite/ctors.html#faq-10.6

我能想到的最好方法是初始化 class ctor 中的成員,如下所示:

class MyClass
{
public:
    MyClass(int param)
        : m_Object(param)
    { };

private:
    OtherClass m_Object;
};

然后,您可以使用所需的任何 ctor 顯式初始化成員(以及為兩個類提供具有不同參數的多個 ctor)。

或提供適當的構造函數:

struct Foo{
  Foo(const Bar& b): myBar(b){}
  Bar myBar;  
}
//...
Foo myFoo1( Bar(1,2,3) );
Foo myFoo2( Bar(3,2,1) );

或者,如果您不想公開欄,則可以設置參數,例如

struct Square{
  Square(const int height, const int width): myDimension(width,height){}
  Dimension myDimension;
}
//...
Square sq(1,2);
Square sq(4,3);

暫無
暫無

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

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