在类声明中使用参数启动类

时间:2011-09-23 03:28:27

标签: c++ class constructor

在我的对象状态中,我想要对象pq。但是pq需要用参数初始化。有没有办法将依赖于参数的类包含在另一个类中?

file.h

class Pq
{
  int a;
  Pq(ClassB b);
};
class State
{
  ClassB b2;
  Pq pq(b2);
  State(ClassB b3);
};

file.cc

  

State::State(ClassB b3) : b2(b3) {}

2 个答案:

答案 0 :(得分:2)

您可以在初始化列表中对其进行初始化,就像使用b2一样:

State::State(ClassB b3) : b2(b3), pq(b2) {}

请记住,成员按头文件中声明的顺序进行初始化,而不是初始化列表中初始值设定项的顺序。

您还需要删除在标题中初始化它的尝试:

class Pq
{
  int a;
  Pq(ClassB b);
};
class State
{
  ClassB b2;
  Pq pq;
  State(ClassB b3);
};

答案 1 :(得分:1)

Class State{
public:
       State(ClassB& bref):b2(bref),pq(b2){} // Depends on the order you declare objects
                                             // in private/public/protected

private:
    ClassB b2;
    Pq pq;

};

在上面的代码中,您必须在初始化列表中维护该顺序,否则您将获得不期望的内容。因此风险很大