在另一个类中声明具有成员初始化器的类的实例

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初始化列表中初始化它。

【讨论】:

以上是关于在另一个类中声明具有成员初始化器的类的实例的主要内容,如果未能解决你的问题,请参考以下文章

在另一个类中做数据成员的对象,可以先不初始化

如何在另一个视图中使用已经初始化的类?

第五周学习总结

1.类中数据成员的声明与初始化总结

具有引用数据成员的类的默认构造函数?

Java的静态成员类