// 隐藏与覆盖的混杂
#include <iostream>
using namespace std;
class C1 {
public:
virtual void f() { cout << "C1::f()" << endl; }
};
class C2 : public C1 {
public:
virtual void f(int i) { cout << "C2::f(int)" << endl; }
};
class C3 : public C2 {
public:
virtual void f() { cout << "C3::f()" << endl; }
virtual void f(int i) { cout << "C3::f(int)" << endl; }
};
int main() {
C1 c1, *p1;
C2 c2, *p2;
C3 c3, *p3;
//p1
p1 = &c1;
p1->f(); //C1::f()
p1->f(3); //c1类的视野范围只有f(),没有f(int)故此处会报错
p1 = &c2;
p1->f(); //在c1类指针的视野下可以看见被隐藏的函数f() C1::f()
p1->f(3); //c1类的视野范围只有f(),没有f(int)故此处会报错
p1 = &c3;
p1->f(); //在c1类指针的视野下可以看见被隐藏的函数f() C1::f()
p1->f(3); //c1类的视野范围只有f(),没有f(int)故此处会报错
//p2
p2 = &c2;
p2->f(); //在c2类中f()被f(int)给隐藏,故此处调用会报错
p2->C1::f(); //调用被隐藏的函数智能“点名道姓”
p2->f(3); //C2::f()
p2 = &c3;
p2->f(); //在c2类中f()被f(int)给隐藏,故此处调用会报错
p2->C1::f(); //调用被隐藏的函数智能“点名道姓”
p2->f(3); //C3::f() 多态性
//p3
p3 = &c3;
p3->f(); //C3::f()
p3->f(3); //C3::f(int)
return 0;
}