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

多態(tài)性

多態(tài)性是面向?qū)ο蟪绦蛟O(shè)計(jì)的重要特性之一,從字面意思上可以簡單理解就是:多種形態(tài),多個(gè)樣子。其實(shí)本質(zhì)意思也是這樣,在面向?qū)ο蟪绦蛟O(shè)計(jì)中,指同樣的方法被不同對象執(zhí)行時(shí)會有不同的執(zhí)行效果。


具體來說,多態(tài)的實(shí)現(xiàn)又可以分為兩種:編譯時(shí)多態(tài)和運(yùn)行時(shí)多態(tài)。前者是編譯的時(shí)候就確定了具體的操作過程,后者是在程序運(yùn)行過程中才確定的操作過程。這種確定操作過程的就是聯(lián)編,也稱為綁定。


聯(lián)編在編譯和連接時(shí)確認(rèn)的,叫做靜態(tài)聯(lián)編,前面我們學(xué)習(xí)的函數(shù)重載、函數(shù)模板的實(shí)例化就屬于這一類。另一種是在運(yùn)行的時(shí)候,才能確認(rèn)執(zhí)行哪段代碼的,叫做動態(tài)聯(lián)編,這種情況是編譯的時(shí)候,還無法確認(rèn)具體走哪段代碼,而是程序運(yùn)行起來之后才能確認(rèn)。


兩者相比之下,靜態(tài)聯(lián)編由于編譯時(shí)候就已經(jīng)確定好怎么執(zhí)行,因此執(zhí)行起來效率高;而動態(tài)聯(lián)編想必雖然慢一些,但優(yōu)點(diǎn)是靈活。兩者各有千秋,有各自不同的使用場景。


下面,我們圍繞靜態(tài)聯(lián)編,給大家舉一個(gè)簡單例子:

/**************************************
//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;
    }
    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;
 
}


定義了兩個(gè)類,一個(gè)圓點(diǎn)類,一個(gè)派生出來的圓類,可以看到主函數(shù)的代碼,四個(gè)輸出面積的結(jié)果,結(jié)果如下:

C++多態(tài)性


大家可以對照代碼理解四個(gè)輸出:

第一個(gè)cout輸出A的面積,是Point類中的area方法,面積為0,沒有問題。

第二個(gè)cout輸出B的面積,很明顯是派生類Circle的area方法,面積自然按公式計(jì)算得出1256.64的值,也沒問題。

第三個(gè)cout輸出的是Point類型指針p指向的Circle類對象的area方法,它輸出了0很明顯是執(zhí)行了Point類里的area方法。這里C++實(shí)行的是靜態(tài)聯(lián)編,即在編譯的時(shí)候就依據(jù)p的類型來定執(zhí)行哪個(gè)area,因此是0。

第四種cout也同理,把Circle類型的對象賦給Point類型的引用,C++同樣實(shí)行靜態(tài)聯(lián)編,也輸出0。


很明顯,這不是我們更期望的結(jié)果,實(shí)際上,對于指針、引用,我們更希望執(zhí)行實(shí)際對象的方法,而不是因?yàn)檫@個(gè)指針、引用的類型而盲目的確定,這就是如果這么寫存在的問題。


如果想達(dá)到我們的要求,即無論指針和引用為什么類型,都以實(shí)際所指向的對象為依據(jù)靈活決定。那么就要更改這種默認(rèn)的靜態(tài)聯(lián)編的方法,采用動態(tài)聯(lián)編,即在運(yùn)行的時(shí)候靈活決定。


下一節(jié),虛函數(shù)為大家詳細(xì)解釋!


點(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í)間)