c++的虛函數與對象切割

來源:互聯網
上載者:User

  一道非常基礎的題目,請回複下面程式的結果:

#include <iostream.h>

class ClassA
{
public:
    void fun1();
    void fun2();
    virtual void fun3();
};

void ClassA::fun1()
{
    cout << "ClassA.fun1"<<endl;
};

void ClassA::fun2()
{
    cout << "ClassA.fun2"<<endl;
};

void ClassA::fun3()
{
    cout << "ClassA.fun3"<<endl;
};

class ClassB : public ClassA
{
public:
    void fun1();
    void fun2();
    virtual void fun3();
};

void ClassB::fun3()
{
    cout << "ClassB.fun3"<<endl;
};

class ClassC : public ClassB
{
public:
    void fun1();
    void fun2();
    virtual void fun3();
};

void ClassC::fun3()
{
    cout << "ClassC.fun3"<<endl;
};

void main()
{
    ClassA *a[3];
    ClassA a1;
    ClassB b1;
    ClassC c1;

    a1.fun3();
    b1.fun3();
    c1.fun3();

    a[0] = &a1;
    a[1] = &b1;
    a[2] = &c1;
    cout << "virtual function array test" <<endl;
    for(int i=0;i<3;i++)
    {
        a[i]->fun3();
    }

    cout << "((ClassA)&b1).fun3():";
    ((ClassA*)&b1)->fun3();
    //object slicing
    cout << "object slicing"<<endl;
    cout <<"((ClassA)b1).fun3():"; 
    ((ClassA)b1).fun3();
}

   如果你知道結果,請回複!以後我再解釋virtual function是怎麼實現多態的!

 

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.