【问题标题】: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

标签: c++ class oop c++11


【解决方案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初始化列表中初始化它。

【讨论】:

    猜你喜欢
    • 2015-04-05
    • 2012-02-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多