【发布时间】:2014-06-06 10:34:41
【问题描述】:
我有一个关于 C++ 行为的小问题。当我尝试使用派生类的构造函数初始化列表初始化基类的数据成员时,出现错误。 但是,如果我在派生类构造函数中进行初始化,或者如果我使用派生类成员初始化列表中的参数调用基类构造函数,则不会出现错误。所以问题是为什么我在第三种情况下会出错。
class A {
protected:
int data;
public:
A(int i = 0) : data(i) {}
};
class B : public A {
public:
B(int i = 0) { data = i; } /* works fine, initializing inside c'tor definition */
B(int i = 0) : A(i) {} /* calling super class constructor with arg works fine */
B(int i = 0) : data(i) {} /* error: class B does not have any field named data */
};
int main() {
B obj1(7);
B* obj2 = new B(8);
A* obj3 = new B(9);
delete obj2;
delete obj3;
}
【问题讨论】:
标签: c++