对于C ++学习目的,我有文件class1.h
,class1.cpp
,class2.h
和class2.cpp
。我想在class1Obj
中实例化一个名为class2
的对象。我在哪里以及如何实例化此对象?我是否在classObj
构造函数中实例化了class2
?
过去我创建了一个指向类的指针,该指针在那段时间运行良好,但我认为指针不是我应该采用的路径,因为classObj
只会在class2
内使用1}}。
答案 0 :(得分:7)
class class1
{
//...
};
class class2
{
class1 member;
//...
};
在class2 ctor中,您可以在构造函数初始化列表中初始化member
。
class2::class2(...)
: member(...)
{
//...
}
答案 1 :(得分:3)
那你是怎么创造过去的指针的?据推测,你做过这样的事情:
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;
};
答案 2 :(得分:1)
这取决于你的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;
};
答案 3 :(得分:1)
在类中实例化一个类:
#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;
}