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以后呢?

 

posted on 2017-12-20 18:17  newbird2017  阅读(113)  评论(0)    收藏  举报