两个吃奶一个添下面视频_人妻第一页香蕉网_欧美xxxx少妇_妺妺窝人体色www婷婷

首先引出,我們的新知識點(diǎn)——虛函數(shù)(virtual function)。


這是一種什么函數(shù)呢?簡單來講,就是一個(gè)函數(shù)前面用virtual聲明的函數(shù),一般形式如下:

virtual 函數(shù)返回值 函數(shù)名(形參)
{
    函數(shù)體
}


那它有什么用呢?虛函數(shù)的出現(xiàn),允許函數(shù)在調(diào)用時(shí)與函數(shù)體的聯(lián)系在運(yùn)行的時(shí)候才建立,即所謂的動(dòng)態(tài)聯(lián)編。那么在虛函數(shù)的派生類的運(yùn)行時(shí)候,就可以在運(yùn)行的時(shí)候根據(jù)動(dòng)態(tài)聯(lián)編實(shí)現(xiàn)都是執(zhí)行一個(gè)方法,卻出現(xiàn)不同結(jié)果的效果,就是所謂的多態(tài)。這樣解決上一節(jié)的問題就有了辦法。


接下來,我們只需要把基類中的area方法聲明為虛函數(shù),那么主函數(shù)中無論P(yáng)oint類型的指針還是引用就都可以大膽調(diào)用,無用關(guān)心類型問題了。因?yàn)樗麄儠罁?jù)實(shí)際指向的對象類型來決定調(diào)用誰的方法,來實(shí)現(xiàn)動(dòng)態(tài)聯(lián)編。


代碼如下:

/**************************************
//Des:C++教程demo
//Author:Huang
//Copyright:www.sztianhecheng.cn
//Date:2017/12/20
**************************************/
#include <iostream>
using namespace std;
#define PI 3.1415926
 
class Point
{
private:
    int x,y;
 
public:
    Point(int x=0,int y=0)
    {
        this->x = x;
        this->y = y;
    }
    virtual double area()
    {
        return 0.0;
    }
};
class Circle:public Point
{
private:
    int r;
public:
    Circle(int x,int y,int R):Point(x,y)
    {
        r = R;
    }
    double area()
    {
        return PI*r*r;
    }
};
 
int main()
{
 
    Point A(10,10);
    cout<<A.area()<<endl;
    Circle B(10,10,20);
    cout<<B.area()<<endl;
    Point *p;
    p = &B;
    cout<<p->area()<<endl;
    Point &pp=B;
    cout<<pp.area()<<endl;
    return 0;
 
}


修改后編譯運(yùn)行如下:

C++虛函數(shù)


大家請自行上機(jī)實(shí)驗(yàn),體會虛函數(shù)及多態(tài)的作用。


需要注意的是:

1. 虛函數(shù)不能是靜態(tài)成員函數(shù),或友元函數(shù),因?yàn)樗鼈儾粚儆谀硞€(gè)對象。

2. 內(nèi)聯(lián)函數(shù)不能在運(yùn)行中動(dòng)態(tài)確定其位置,即使虛函數(shù)在類的內(nèi)部定義,編譯時(shí),仍將看作非內(nèi)聯(lián)。

3. 構(gòu)造函數(shù)不能是虛函數(shù),析構(gòu)函數(shù)可以是虛函數(shù),而且通常聲明為虛函數(shù)。


點(diǎn)贊(0)

C語言網(wǎng)提供由在職研發(fā)工程師或ACM藍(lán)橋杯競賽優(yōu)秀選手錄制的視頻教程,并配有習(xí)題和答疑,點(diǎn)擊了解:

一點(diǎn)編程也不會寫的:零基礎(chǔ)C語言學(xué)練課程

解決困擾你多年的C語言疑難雜癥特性的C語言進(jìn)階課程

從零到寫出一個(gè)爬蟲的Python編程課程

只會語法寫不出代碼?手把手帶你寫100個(gè)編程真題的編程百練課程

信息學(xué)奧賽或C++選手的 必學(xué)C++課程

藍(lán)橋杯ACM、信息學(xué)奧賽的必學(xué)課程:算法競賽課入門課程

手把手講解近五年真題的藍(lán)橋杯輔導(dǎo)課程

Dotcpp在線編譯      (登錄可減少運(yùn)行等待時(shí)間)