一区二区三区av无码观看_亚洲av极品无码专区在线观看_亚洲一区二区三区乱码AⅤ_好深好爽使劲我还要_国产成人a高清视频

聊城共贏網絡,聊城網站建設
我們專注:聊城做網站,聊城建網站,聊城網站建設,網站制作,虛擬主機,域名注冊,網站推廣等。聯系電話:15066359825 點擊這里給我發消息
最新公告 行業資訊  
當前位置:首頁 --> 最新動態 --> 網站公告
C++多態演示\c++多態性演示
發布時間:2014/5/8 16:03:20

共贏網絡:初學者對于多態的概念總是理解不清楚,一下通過幾個實例在理解多態。
多態描述的是使用基類的指針或引用操作多個類型的能力。

我們知道,子類的指針是可以隱式轉化為父類的,所以我們在進行程序設計的時候如果要對一個未知的類型進行處理,可以在方法聲明時把參數的類型聲明為父類的指針。

這要我們就是實現了根據傳入的類型執行不同的方法。這里的關鍵是子類在重寫父類的虛方法時是在虛方法表的相應位置對父類虛方法實現覆蓋。

舉個例子:

頭文件classFile.h:

#ifndef classFile_Header_File
#define classFile_Header_File
class father
{
public:
virtual void show();
};
class son: public father
{
public:
void show();
void sayhi();
};
#endif

這里我們在子類中對父類實現了override(C++沒有提供override關鍵字,所以改寫父類的方法要格外小心)。

TestPoly.cpp代碼如下:

#include<iostream>
#include"classFile.h"
using namespace std;

void hello(father* fp)
{
fp->show();
}
int main()
{
father f;
hello(&f);
son s;
hello(&f);

}

inline void father::show()
{
cout<<"I am father"<<endl;
}

inline void son::show()
{
cout<<"I am son"<<endl;
}

inline void son::sayhi()
{
cout<<"Hi, I am son"<<endl;
}

這里,傳入父類的指針將調用father::show(),傳入子類的指針時,雖然進行了隱式的類型轉化,但是由于子類在其繼承的虛方法表中相應的位置覆蓋了父類的show()方法,所用調用的實際上son::show()的內容。此時子類的方法表中不存在father::show()了,如果我們把virtual關鍵字去掉,那么father::show()和son::show()將同時存在與子類的方法表中。

那么如果子類做了父類沒用做的事情,我們應如何調用了?

比如這里,我們的子類中實現了sayhi()方法,這是父類指針father*無法獲取到的地址(實際是無法直接獲取到,通過手動的指針偏移還是可以的,不知道是C++的優點還是缺點),這個地方,如果我們能夠通過實際傳入的對象指針類型進行操作就OK了。還好C++為我們提過了這個功能,那就是引入關鍵字dynamic_cast。

我們把hello()函數改寫如下:

void hello(father* fp)
{
son* ps=dynamic_cast<son*>(fp);//將fp 轉換為son*類型
if(ps)//如果轉換失敗則返回0
ps->sayhi();
else
fp->show();
}

調用:

int main()
{
father f;
hello(&f);//轉換失敗,執行else
son s;
hello(&s); //輸出Hi,I am son

}

qiao024.com

銷售部 點擊這里給我發消息
技術部
點擊這里給我發消息
售后服務 點擊這里給我發消息
公司電話(傳真) 15066359825
聊城建網站首頁   公司簡介   網站建設   虛擬主機   域名注冊   網站推廣   公司資訊   成功案例   服務中心   聯系我們  網站地圖
版權所有 2008-2009 共贏網絡 qiao024.com 公司地址:聊城市利民東路 郵編:252000
銷售熱線:15066359825 技術支持:QQ:297369059 銷售在線服務: QQ:914082597
網站建設公司專業從事:聊城做網站,聊城建網站,聊城網站建設,聊城網站制作,虛擬主機,域名注冊,網站推廣等服務
聊城共贏網絡  
分公司:臨清網站建設、陽谷網站建設高唐網站建設、茌平網站建設、東阿網站建設、冠縣網站建設莘縣網站建設