出于 C++ 学习的目的,我有文件class1.h
、class1.cpp
和. 我想实例化一个名为inside的对象。我在哪里以及如何实例化这个对象?我是否在构造函数中实例化?class2.h
class2.cpp
class1Obj
class2
classObj
class2
过去我创建了一个指向类的指针,当时效果很好,但我认为指针不是我这次应该采取的路线,因为classObj
只会在内部使用class2
。
出于 C++ 学习的目的,我有文件class1.h
、class1.cpp
和. 我想实例化一个名为inside的对象。我在哪里以及如何实例化这个对象?我是否在构造函数中实例化?class2.h
class2.cpp
class1Obj
class2
classObj
class2
过去我创建了一个指向类的指针,当时效果很好,但我认为指针不是我这次应该采取的路线,因为classObj
只会在内部使用class2
。
class class1
{
//...
};
class class2
{
class1 member;
//...
};
在class2 ctor中,可以member
在构造函数初始化列表中进行初始化。
class2::class2(...)
: member(...)
{
//...
}
那么您过去是如何创建指针的呢?大概,你做了这样的事情:
class class2
{
public:
class2()
{
class1Pointer = new class1();
}
// Destructor, copy constructor/assignment, etc...
private:
class1* class1Pointer;
};
现在你想做同样的事情,但这次你不想要一个指向 的指针class1
,你想要一个class1
本身:
class class2
{
public:
class2() {}
// Destructor, copy constructor/assignment, etc...
private:
class1 class1Obj;
};
创建对象时,该对象将被默认初始化class2
。如果您的 class1 构造函数需要一些参数,请使用初始化列表:
class class2
{
public:
class2() : class1Obj(1, 2, 3) {}
// Destructor, copy constructor/assignment, etc...
private:
class1 class1Obj;
};
在一个类中实例化一个类:
#include <iostream>
using namespace std;
class Foo
{
public:
Foo(int i)
{
}
};
class Bar
{
Foo i; //<--- instantiate a class inside a class ----
public:
Bar() : i(1) //<--- instantiate a class inside a class ----
{
}
};
int main(void)
{
Bar b;
cout<<" \nPress any key to continue\n";
cin.ignore();
cin.get();
return 0;
}
这取决于您的 Class1。如果它的构造函数接受一些参数,那么您必须在 Class2 构造函数或初始化列表中显式初始化它。
Class2 {
public:
class2() {
//Here m_class1Obj will be instantiated
m_class1Obj = Class1(/*some params*/);
}
private:
Class1 m_class1Obj;
};
或者
Class2 {
public:
class2() : m_class1Obj() {}
private:
Class1 m_class1Obj;
};