在另一个类中声明具有成员初始化器的类的实例
Posted
技术标签:
【中文标题】在另一个类中声明具有成员初始化器的类的实例【英文标题】:Declaring An Instance Of A Class With Member Initializers In Another Class 【发布时间】:2015-03-30 17:08:30 【问题描述】:所以我有一个类,其构造函数包含成员初始化器,如下所示:
class aClass
public:
//Functions
aClass(int sVal1, float sVal2, float sVal3,float sVal4); //Constructor
~aClass(); //Destructor
private:
int someValue;
float sSomeValue;
float tSomeValue;
float fSomeValue;
;
类的 .cpp 文件中的构造函数如下所示:
NPC::NPC(int sVal1, float sVal2, float sVal3, float sVal4)
:someValue(sVal1), sSomeValue(sVal2), tSomeValue(sVal3), fSomeVlaue(sVal4)
我的问题是:如果我要在另一个类头文件中将这个类的一个实例声明为私有变量,那么声明的语法是什么?
【问题讨论】:
这里是一个简化的例子:ideone.com/OVvorn 是的,如果另一个类的实现和接口文件是相同的,但是如果接口文件ie。头文件与实现是分开的,你如何在另一个类的接口文件中声明一个aClass的实例 - 你必须在接口文件中调用构造函数还是你可以简单地声明一个aClass的实例变量 - 没有初始化器? 我不明白。你只是声明了变量,但它必须包含在构造函数的初始化列表中,否则你会得到一个编译器错误:ideone.com/2oTKgh 【参考方案1】:在另一个类的标题中,你会有类似的东西:
class anotherClass
public:
anotherClass();
anotherClass(int sVal1, float sVal4);
...
private:
aClass mya;
;
当然,当您在那里使用aClass
时,您还需要包含您的第一个类的标题。
在您的 cpp 中,您将初始化如下内容:
anotherClass::anotherClass()
: mya(0,0,0,0) // as aClass has no default constructor,
// you must always make sure the init list provides for mya
anotherClass::anotherClass(int sVal1, float sVal4)
: mya(sVal1, 0, 0, sVal4)
备注:由于aClass
没有默认构造函数,你必须确保你在anotherClass
初始化列表中初始化它。
【讨论】:
以上是关于在另一个类中声明具有成员初始化器的类的实例的主要内容,如果未能解决你的问题,请参考以下文章