class parent {public: void f() { cout << "parent f()" << endl; } void f(int i) { cout << "parent f(int i)" << endl; }};class child :public parent { };int main() { child a; a.f(); a.f(2); return 0;}
父类中发生了重载。
子类中如果没有定义名字冲突的成员函数,这时候,父类中的两个函数都可以访问。
class child2 :public parent {public: void f() { cout << "child f()" << endl; }};int main() { child2 a; parent *p = &a; child2 *c = &a; a.f(); //child f() a.parent::f(); //parent f() a.parent::f(2); //parent f(2) p->f(); // parent f() p->f(2); // parent f(2) c->f(); // child f() // c->f(2); illegal return 0;}
有冲突的时候,a只能直接访问自己定义的这个。
父类中的f必须通过a.parent::f这样的方式访问。这三个是并存的。
加了virtual以后呢?