对于C++学习的目的,我有文件class1.h
,class1.cpp
,class2.h
和class2.cpp
。我想在class2
内实例化一个名为class1Obj
的对象。在哪里以及如何实例化此对象?我是否在class2
构造函数中实例化classObj
?如何实例化C++类中的对象?
在过去,我创建了一个指向一个班级的指针,该班级在当时运行良好,但我认为指针不是我应该选择的路线,因为classObj
只能在class2
之内使用。
对于C++学习的目的,我有文件class1.h
,class1.cpp
,class2.h
和class2.cpp
。我想在class2
内实例化一个名为class1Obj
的对象。在哪里以及如何实例化此对象?我是否在class2
构造函数中实例化classObj
?如何实例化C++类中的对象?
在过去,我创建了一个指向一个班级的指针,该班级在当时运行良好,但我认为指针不是我应该选择的路线,因为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;
};
这取决于您的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;
};
除了你没有显示初始化,你正在显示任务。 – john
-1不使用构造函数初始化列表。如果M_class1Obj是const,该怎么办?那么你会怎么做? –
建设性评论家。更新。 – besworland
实例化一个类的类中:
#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的成员变量添加到等级2。它将在class2对象的构造时间实例化。 –
你可以将它实例化,只需要编写相应的正确代码即可。如果你在构造函数中做,它会更好。如何实例化:Class1实例; – ISTB
你不需要显式的'new'操作符来实例化。所以一个变量就足够了 – madhairsilence