C++虛函數實現動態多態運行

來源:互聯網
上載者:User

#include<iostream>
using namespace std;


class A
{
 int a;
 public:
 virtual void fun(){cout<<"調用A::fun()"<<endl;cout<<"a="<<a<<endl;}          //如果沒有virtual
  A(int tmp=111){a = tmp;cout<<"調用A建構函式"<<endl;}
};

class B:public A
{
 int b;
 public:
  void fun()
  {
   cout<<"調用B::fun()"<<endl;
   cout<<"b="<<b<<endl;
  }
  B(int tmp=2)//:A(tmp)
  {
   b = tmp;cout<<"調用B建構函式"<<endl;
  }
};

int main()
{
 B* b=new B();
 A *tmpa;
 tmpa = b;
 tmpa->fun();
    //delete a;
 delete b;
 return 0;
}

編譯後運行結果:

[student@SEP4020 testc++]$ ./xxx 
調用A建構函式
調用B建構函式
調用B::fun()
b=2

 

但是如果把類A中的virtual關鍵字去掉的運行結果:

[student@SEP4020 testc++]$ ./xxx
調用A建構函式
調用B建構函式
調用A::fun()
a=111

由此可知,將衍生類別對象地址賦值給一個基類指標,由虛函數可實現C++的運行時多態性,儘管調用形式會一樣,但是卻調用的不同對象中的虛函數

聯繫我們

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