虚函数专题

来源:互联网 发布:swmm软件下载 编辑:程序博客网 时间:2024/06/18 15:47

结合笔记本
程序:

#include <iostream>  using namespace std;class Base1 {public:    virtual void display() const;  //虚函数  };void Base1::display() const {    cout << "Base1::display()" << endl;}class Base2:public Base1 {public:    virtual void display() const;};void Base2::display() const {    cout << "Base2::display()" << endl;}class Derived : public Base2 {public:    virtual void display() const;};void Derived::display() const {    cout << "Derived::display()" << endl;}void fun(Base1 *ptr) {    ptr->display();}int main() {    Base1 base1;    Base2 base2;    base1.display();    base2.display();    Derived derived;    fun(&base1);    fun(&base2);    fun(&derived);    return 0;}
#include <iostream>using namespace std;class Base{public:    virtual void fun1() = 0;    virtual void fun1(int)    {    }    virtual void fun2()    {    }    void fun2(int)    {    }    void fun3(float)    {    }};class Derived :private Base{public:    virtual void fun1()    {        cout << "This function is implemented to avoid to be a abstract class";    }    void CallBaseFun2(int x)    {        Base::fun2(x);    }};int main(){    Derived a;    a.CallBaseFun2(3);    a.fun2(); //incorrect     cout << "Hello world!" << endl;    return 0;}
#include <iostream>using namespace std;class Base{public:/*    virtual void fun1() = 0;*/     void fun1()    {        cout << "爸爸1" << endl;    }    //virtual void fun2()    //{    //  cout << "爸爸2" << endl;    //}    //void fun2(int)    //{    //  cout << "爸爸2整形" << endl;    //}    //void fun3()    //{    //  cout << "爸爸3" << endl;    //}};class Derived :public Base{public:     void fun1()    {        cout << "女儿1" << endl;    }    //void fun3()    //{    //  cout << "女儿3" << endl;    //}    //void fun4()    //{    //  cout << "女儿4" << endl;    //}};class DDerived :public Base{//public:public:    // void fun1()    //{    //  cout << "二女儿1" << endl;    //}};int main(){    //Derived a;    //a.fun1(); //correct Derived:fun1();    ////a.fun1(8); //incorrect    //a.fun2(); //correct Base:fun2()    //a.fun2(3); //correct Base:fun2(int);    //a.fun3(); //correct Derived:fun3()    ////a.fun3(3.0); //incorrect    //cout << "Hello world!" << endl;    Base a;    Derived nver;    DDerived ernver;    Base *ptr;    ////ptr->fun3();    ////cout << ptr << endl;    ptr = &nver;    //cout << ptr << endl;    ptr->fun1();    nver.fun1();    ptr = &ernver;    //cout << ptr << endl;    ptr->fun1();    nver.fun1();    //ptr = &er    //ptr = &ernver;    //cout << ptr << endl;    //ptr->fun1();    return 0;}
原创粉丝点击