很抱歉,如果之前有人询问,我似乎找不到任何东西。我不确定如何搜索这个。
我有这样的事情:
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
成为指针。
解决这个问题的正确方法是什么?
答案 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) {}
}