最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

實例講解C++編程中的虛函數(shù)與虛基類

 更新時間:2016年02月24日 16:57:20   作者:孫東  
這篇文章主要介紹了C++編程中的虛函數(shù)與虛基類的實例講解,虛函數(shù)與虛基類的使用是C++入門學習中的基礎(chǔ)知識,需要的朋友可以參考下

虛函數(shù)

#include "stdafx.h"

#include <iostream>

using namespace std;

class B0//基類B0聲明
{
public:
 void display(){cout<<"B0::display()"<<endl;}//公有成員函數(shù)
};

class B1: public B0//公有派生類B1聲明
{
public:
 void display(){cout<<"B1::display()"<<endl;}//公有成員函數(shù)
};

class D1: public B1//公有派生類D1聲明
{
public:
 void display(){cout<<"D1::display()"<<endl;}//公有成員函數(shù)
};

void fun(B0 *ptr)//普通函數(shù)
{//參數(shù)為指向基類對象的指針
 ptr->display();//"對象指針->成員名"
}
void main()//主函數(shù)
{
 B0 b0;//聲明基類B0類對象
 B1 b1;//聲明B1類對象
 D1 d1;//聲明D1類對象
 B0 *p;//聲明B0類指針
 p=&b0;//B0類指針指向B0類對象,
 fun(p);
 p=&b1;//B0類指針指向B1類對象,指向基類的指針也可以指向派生類。
 fun(p);
 p=&d1;//B0類指針指向D1類對象,指向基類的指針也可以指向派生類。
 fun(p);
}

輸出結(jié)果:

B0::display()
B0::display()
B0::display()
Press any key to continue

類型兼容規(guī)則舉例

#include "stdafx.h"

#include <iostream>

using namespace std;

class B0//基類B0聲明
{
public:
 virtual void display(){cout<<"B0::display()"<<endl;}//公有成員函數(shù)
};

class B1: public B0//公有派生類B1聲明
{
public:
 void display(){cout<<"B1::display()"<<endl;}//公有成員函數(shù)
};

class D1: public B1//公有派生類D1聲明
{
public:
 void display(){cout<<"D1::display()"<<endl;}//公有成員函數(shù)
};

void fun(B0 *ptr)//普通函數(shù)
{//參數(shù)為指向基類對象的指針
 ptr->display();//"對象指針->成員名"
}
void main()//主函數(shù)
{
 B0 b0;//聲明基類B0類對象
 B1 b1;//聲明B1類對象
 D1 d1;//聲明D1類對象
 B0 *p;//聲明B0類指針
 p=&b0;//B0類指針指向B0類對象,
 fun(p);
 p=&b1;//B0類指針指向B1類對象,指向基類的指針也可以指向派生類。
 fun(p);
 p=&d1;//B0類指針指向D1類對象,指向基類的指針也可以指向派生類。
 fun(p);
}

輸出結(jié)果:

B0::display()
B1::display()
D1::display()
Press any key to continue 

虛函數(shù)是為了實現(xiàn)某種功能而假設(shè)的函數(shù),虛函數(shù)只能是類中的一個成員函數(shù),不能是靜態(tài)成員,使用關(guān)鍵字virtual用于在類中說明該函數(shù)是虛函數(shù)。 虛函數(shù)更是為了實現(xiàn)面向?qū)ο蟮亩鄳B(tài)性而產(chǎn)生的,使用虛函數(shù)和多態(tài)

性能夠簡化代碼長度,支持更簡單的順序,便于程序的調(diào)試,維護。
虛函數(shù)的定義方法:

class A
{
  public:
    virtual void fun();  //define virtual function
};
void A::fun() { ... }      //member function describe

上面定義了一個虛函數(shù),然后在類體外進行了函數(shù)的具體描述。

在類的繼承當中,當基類中聲明了某個虛函數(shù),即使在派生類中沒有聲明虛函數(shù),那么在以后的繼承結(jié)構(gòu)中都是

虛函數(shù),當然如果有多重繼承,在每個派生類中還是推薦對每個虛函數(shù)進行顯式的聲明。

為了說明虛函數(shù)在派生類中的應用,我寫段代碼作例子:

#include "stdio"
class cbase
{
public:
 virtual void vfoo()
 {
 printf("vfoo from cbase/n");
 };
 void foo()
 {
 printf("foo from cbase/n");
 }
};

class cderivd : public cbase
{
public:
 virtual void vfoo()
 {
 printf("vfoo from cderivd/n");
 };
 void foo()
 {
 printf("foo from cderivd/n");
 };
};

int main(int argc, char* argv[])
{
 cbase* pbase = new cderivd();
 pbase->foo(); //非虛函數(shù),根據(jù)指針類型決定調(diào)用哪個foo,本例指針類型為cbase,所以調(diào)用的是cbase::foo()
 pbase->vfoo(); //虛函數(shù),調(diào)用的是派生類的vfoo
 delete pbase;

 cderivd* pd = new cderivd();
 pd->foo();    //非虛函數(shù),本例指針類型為cderivd*,所以調(diào)用cderivd::foo();
 pd->vfoo();
 delete pd;

 cderivd d;
 d.foo();
 d.vfoo();
 ((cbase)d).foo(); //將d強行切割為cbase,這時調(diào)用的無論是foo還是vfoo都將是base的
 ((cbase)d).vfoo();

 getchar();
 return 0;
}

程序在DevCPP下編譯通過,輸出:

foo from cbase
vfoo from cderivd
foo from cderivd
vfoo from cderivd
foo from cderivd
vfoo from cderivd
foo from cbase
vfoo from cbase

虛基類

#include "stdafx.h"

#include<iostream>
#include<string>

using namespace std;

class person{//聲明基類 
protected:
 int age;
 char sex;
 string name;
public:
 person(int a,char s,string nam){
 age=a;
 sex=s;
 name=nam;
 }
};
class teacher:virtual public person
{
protected:
 string title;
public:
 teacher(int a,char s,string nam,string t):person(a,s,nam){
 title=t;
 }
};
class student:virtual public person
{
protected:
 float score;
public:
 student(int a,char s,string nam,float sc):person(a,s,nam){
 score=sc;
 }
};
class graduate:public teacher,public student
{
protected:
 float wdge;
public:
 graduate(int a,char s,string nam,string t,float sc,float wd):person(a,s,nam),teacher(a,s,nam,t),student(a,s,nam,sc){
 wdge=wd;
 }
 void show(){
 cout<<name<<endl;
 cout<<age<<endl;
 cout<<sex<<endl;
 cout<<title<<endl;
 cout<<score<<endl;
 cout<<wdge<<endl;
 }
};
int main(){
 graduate gr(22,'f',"k;asdjf;daf","klsdaf",89.5,79.5);
 gr.show();
 return 0;
}

輸出結(jié)果:

k;asdjf;daf
22
f
klsdaf
89.5
79.5
Press any key to continue 

相關(guān)文章

  • 詳解C語言中的指針與數(shù)組的定義與使用

    詳解C語言中的指針與數(shù)組的定義與使用

    這篇文章主要介紹了C語言中的指針與數(shù)組的定義與使用,本文給大家介紹的非常詳細,具有一定的參考借鑒價值,需要的朋友可以參考下
    2019-12-12
  • VC創(chuàng)建DLL動態(tài)鏈接庫的方法

    VC創(chuàng)建DLL動態(tài)鏈接庫的方法

    這篇文章主要介紹了VC創(chuàng)建DLL動態(tài)鏈接庫的方法,實例分析VC創(chuàng)建動態(tài)鏈接庫的完整步驟,需要的朋友可以參考下
    2015-05-05
  • C語言中多維數(shù)組的內(nèi)存分配和釋放(malloc與free)的方法

    C語言中多維數(shù)組的內(nèi)存分配和釋放(malloc與free)的方法

    寫代碼的時候會碰到多維數(shù)組的內(nèi)存分配和釋放問題,在分配和釋放過程中很容易出現(xiàn)錯誤。下面貼上一些示例代碼,以供參考。
    2013-05-05
  • C語言中while與do-while的介紹與注意事項

    C語言中while與do-while的介紹與注意事項

    對于C語言中的while與do-while,相信很多都再熟悉不過了,最近在工作中就用到了,所以想著總結(jié)一下,方便自己或者有需要的朋友們參考借鑒,文中通過示例代碼介紹的很詳細,感興趣的朋友們下面來一起學習學習吧。
    2016-10-10
  • C語言漢諾塔的簡單了解

    C語言漢諾塔的簡單了解

    這篇文章主要給大家介紹了關(guān)于C語言漢諾塔的相關(guān)資料,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2021-02-02
  • C++中的erase()函數(shù)用法小結(jié)

    C++中的erase()函數(shù)用法小結(jié)

    本文主要介紹了C++中的erase()函數(shù)用法小結(jié),文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2025-03-03
  • C語言?詳解如何刪除有序數(shù)組中的重復項

    C語言?詳解如何刪除有序數(shù)組中的重復項

    數(shù)組不擅長插入(添加)和刪除元素。數(shù)組的優(yōu)點在于它是連續(xù)的,所以查找數(shù)據(jù)速度很快。但這也是它的一個缺點。正因為它是連續(xù)的,所以當插入一個元素時,插入點后所有的元素全部都要向后移;而刪除一個元素時,刪除點后所有的元素全部都要向前移
    2022-03-03
  • C++利用靜態(tài)成員或類模板構(gòu)建鏈表的方法講解

    C++利用靜態(tài)成員或類模板構(gòu)建鏈表的方法講解

    這篇文章主要介紹了C++利用靜態(tài)成員或類模板構(gòu)建鏈表的方法講解,鏈表是基礎(chǔ)的數(shù)據(jù)結(jié)構(gòu),而在C++中構(gòu)件單鏈表還是稍顯復雜,需要的朋友可以參考下
    2016-04-04
  • 淺析STL中的常用算法

    淺析STL中的常用算法

    以下是對STL中的常用算法進行了詳細的介紹,需要的朋友可以過來參考下,希望對大家有所幫助
    2013-09-09
  • C語言中數(shù)組常用的一些排序算法小結(jié)

    C語言中數(shù)組常用的一些排序算法小結(jié)

    數(shù)組的排序方法有很多,效率也各不相同,下面這篇文章主要給大家介紹了關(guān)于C語言中數(shù)組常用的一些排序算法的相關(guān)資料,文中通過代碼介紹的非常詳細,需要的朋友可以參考下
    2024-01-01

最新評論

田东县| 百色市| 绥中县| 东兰县| 南涧| 吴忠市| 嘉义县| 乌鲁木齐市| 逊克县| 子洲县| 唐河县| 陵川县| 铜陵市| 钦州市| 清涧县| 乌拉特前旗| 什邡市| 盐边县| 泊头市| 呼和浩特市| 乐都县| 南宁市| 九江县| 珠海市| 繁昌县| 宁陕县| 孟村| 个旧市| 鸡西市| 武安市| 安泽县| 丹巴县| 泰兴市| 宣化县| 团风县| 襄樊市| 黄浦区| 东辽县| 鹤庆县| 萝北县| 宜兰市|