【发布时间】:2012-09-17 15:47:12
【问题描述】:
我希望 C 类从 A 类继承其虚函数,而 D 类(C 类中的嵌套类)从 B 类(A 类中的嵌套类)继承其数据字段,这就是我所拥有的。
file1.h
class A{
public:
virtual void foo()=0;
class B{
public:
int data;
};
};
file2.h
class C : public A{
public:
class D : public A::B{
};
};
file2.cpp
void C::foo(){//code}
C::D::D():data(0){//Bad initialization list, error being data is not a member of C::D even it should inherits from its base class
data = 0; //good! compiler can see data is a member of A::B,and C::D inherits from it
}
我有两个问题,第一个是我正在做的正确方法来实现这种继承。其次,正如我所评论的,为什么编译器可以在手动初始化过程中看到数据来自 A::B 而不是在初始化列表中?他们不应该在同一个范围内吗?非常感谢
编辑1:
所以如果类 C::D(foo) 不直接继承自 A::B(foo),而是 C 继承自 A,我的看法是,由于 C 继承自 A 及其所有公共字段,包括它的内部类 A::B(foo), D(foo) 与 A::B(foo) 具有完全相同的名称,并且是 C 的内部类,就像这样,即两个内部类都使用 foo
class A{
public:
class foo{
public:
int data;
};
};
class C : public A{
public:
class foo{
};
};
当我直接调用 C::foo 时,编译器会不会感到困惑?因为范围内有两个具有名称的构造函数?或者它选择调用“最近的”,例如 C:foo?而不是爬上继承链?非常感谢
【问题讨论】:
-
请提出另一个问题进行编辑,而不是编辑您的旧问题。首先,接受的答案仅适用于第一部分。您可以在新问题中引用此问题。
标签: c++ inheritance