- 论坛徽章:
- 0
|
#include <iostream>
class A {
public:
class B {
public:
class C {
public:
virtual void f(){std::cout << "A::B::C\n";}
};
};
class C {
public:
virtual void f(){std::cout << "A::C\n";}
};
};
class D : public A::B::C /* , public A::C */ { //(1)
public:
/* class C {
public:
virtual void f(){std::cout << "D::C\n";}
};*/ //(2)
void f(){std::cout << "D\n";}
};
class E {
public:
virtual void f(){std::cout << "E\n";}
};
int main(){
D* p = new D; // what about A::B::C* p?
p->C::f(); //here
}
这么一段程序。here处的C::f会被解析为A::B::C::f。
如果去掉注释(1),会错误说D::C不存在。再去掉注释(2)会错误说D::C不是D的base class。
p应该可以使用所有D的base class的f。对一个不完整的限定比如C::f,编译器应该如何解析得到完整的限定呢(比如A::B::C)?
有没有办法让D继承D::C呢(直接或间接)? |
|