C++虛函數題目

來源:互聯網
上載者:User

這是CSDN上一個我覺得對C++初學者瞭解虛函數一處很好的題目。

#include <iostream>
using namespace std;

class CA
{
public:
void f(){cout << "CA f()" << endl;}
virtual void ff(){cout << "CA ff()" << endl;f();}
};

class CB : public CA
{
public :
virtual void f(){cout << "CB f()" << endl;}
void ff(){cout << "CB ff()" << endl;f();CA::ff();}
};
class CC : public CB
{
public:
virtual void f(){cout << "C f()" << endl;}
};

int main()
{
CB b;
CA *ap = &b;
CC c;
CB &br = c;
CB *bp = &c;

ap->f();
cout<<endl;

b.f();
cout<<endl;

br.f();
cout<<endl;

bp->f();
cout<<endl;

ap->ff();
cout<<endl;

bp->ff();
cout<<endl;

return 0;
}

運行結果:

CA f()

 

CB f()

 

C f()

 

C f()

 

CB ff()
CB f()
CA ff()
CA f()

 

CB ff()
C f()
CA ff()
CA f()

分析:

兩條原則:

(1)指標和引用均能實現多態。

(2)輸出什麼關鍵看“=”右邊是否為虛函數。

如果CA類中的f()也為虛函數,即程式如下:

include <iostream>using namespace std;class CA{public:    virtual void f(){cout << "CA f()" << endl;}    virtual void ff(){cout << "CA ff()" << endl;f();}};class CB : public CA{public :    virtual void f(){cout << "CB f()" << endl;}    void ff(){cout << "CB ff()" << endl;f();CA::ff();}};class CC : public CB{public:    virtual void f(){cout << "C f()" << endl;}};int main(){    CB b;    CA *ap = &b;    CC c;    CB &br = c;    CB *bp = &c;    ap->f();    cout<<endl;    b.f();    cout<<endl;    br.f();    cout<<endl;    bp->f();    cout<<endl;    ap->ff();    cout<<endl;    bp->ff();    cout<<endl;    return 0;}

  運行結果: 

  CB f()

 

  CB f()

 

  C f()

 

  C f()

 

  CB ff()
  CB f()
  CA ff()
  CB f()

 

  CB ff()
  C f()
  CA ff()
  C f() 

  在C++中實現動態多態性需要三個條件:

  (1)對象是從同一個類階層中的不同的類產生的;

  (2)調用的函數是虛函數;

  (3)通過基類指標或引用來調用虛函數。

原帖:http://topic.csdn.net/u/20120330/22/ca8bb6bf-0f2d-46a8-bdbd-e875c5349194.html?seed=1025928861&r=78097348#r_78097348

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.