对象声明/初始化作为不同类的私有成员的问题

时间:2011-03-14 00:46:04

标签: c++ class object initialization declaration

很抱歉,如果之前有人询问,我似乎找不到任何东西。我不确定如何搜索这个。

我有这样的事情:

class A {
    private:
        int x;
        int y;
    public:
        A(int, int);
}

class B {
    private:
        A a(3, 4); // Doesn't compile because of this line
    public:
        B();
}

我能想到解决这个问题的唯一方法是让a指向A,然后在a = new A(3, 4);的构造函数中执行B。但我不希望a成为指针。

解决这个问题的正确方法是什么?

3 个答案:

答案 0 :(得分:2)

class B {
    private:
        A a;
    public:
        B() : a(3,4) {}
};

从更广泛的意义上讲,解决方案是通过reading a book about it学习C ++。是的,这很麻烦,但教程的重点在于他们以合理的顺序介绍概念,当他们告诉你有关数据成员时,他们会同时告诉你如何初始化它们。

答案 1 :(得分:2)

使用“成员初始化列表”标记B的构造函数。而不是:

B::B() {
    ...
}

你这样做:

B::B() : a(3, 4) {
    ...
}

或者如果在标题中定义了构造函数:

class B {
    private:
        A a;
    public:
        B() : a(3, 4) {
            ...
        }
};

答案 2 :(得分:0)

如果您想要使用参数3和4初始化B.a,那么您可以在B的构造函数中执行此操作,例如,

class B {
    private:
        A a;
    public:
        B(): a(3, 4) {}
}