让我说我有一个班级
class MyClass {
public:
AnotherClass myObject;
};
我的问题是我想用它的构造函数的参数初始化myObject,正好是我在函数期间在堆栈中声明它
AnotherClass myObject(1, 2, 3);
但我想为构造函数中的类成员执行此操作:
MyClass::MyClass() {
myObject = ...?
...
}
问题正是如此。如果我声明一个具有构造函数的类成员,C ++会调用默认构造函数吗?我怎样才能在类定义中声明变量,但在构造函数中初始化它?
感谢您的回答!
答案 0 :(得分:8)
您可以使用初始化列表。
class MyClass {
public:
MyClass() : myObject(1,2,3){ }
AnotherClass myObject;
};
答案 1 :(得分:8)
使用 ctor-initializer 。成员在基类之后和构造函数体运行之前初始化。
MyClass::MyClass() : myObject(1,2,3) {
...
}
答案 2 :(得分:4)
Google for 构造函数初始化列表
http://www.learncpp.com/cpp-tutorial/101-constructor-initialization-lists/
答案 3 :(得分: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)
{
}
答案 4 :(得分:3)
始终使用初始化列表:
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
答案 5 :(得分:1)
我能想到的最好的方法是初始化类ctor中的成员,如下所示:
class MyClass
{
public:
MyClass(int param)
: m_Object(param)
{ };
private:
OtherClass m_Object;
};
然后,您可以使用您想要的任何一个ctor显式初始化该成员(以及为这两个类提供具有不同参数的多个ctors)。
答案 6 :(得分:0)
或提供适当的构造函数:
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);