面向对象的多态性(1)
1、多態(tài)性具體來(lái)說(shuō):就是同一個(gè)函數(shù)名稱,作用在不同的對(duì)象產(chǎn)生不同的 ,主要針對(duì)的是基類(lèi)和多個(gè)派生類(lèi)之間的關(guān)系
例子:
#include<iostream> using namespace std; class animal { public:void sleep(){cout << "aniaml is sleeping" << endl;}void breath(){cout << "aniaml is breathing" << endl;} }; class fish :public animal { public:void breath(){cout << "fish is breathing" << endl;} };int main() {fish fh;animal* an = &fh;an->breath();fh.breath();system("pause");return 0; }在例子中,定義了一個(gè)fish和animal類(lèi)的對(duì)象,并且將fish類(lèi)的對(duì)象賦值給animal類(lèi)的對(duì)象an,。。。這里是指針變量,將fh的地址賦給了an,按照我們的理解
an對(duì)象調(diào)用的函數(shù)應(yīng)該是屬于fh地址中的函數(shù),應(yīng)該調(diào)用fish::breath()函數(shù),,,但是在c++編譯的過(guò)程中,編譯器進(jìn)行了類(lèi)型的轉(zhuǎn)換,此時(shí)c++編譯器認(rèn)為
an對(duì)象保存的是animal對(duì)象的地址,而不是指針變量指向的fh的地址,,,,所以函數(shù)調(diào)用的是animal::breath()函數(shù)。
在構(gòu)造fish類(lèi)的對(duì)象時(shí),系統(tǒng)首先調(diào)用的是aniaml;類(lèi)的構(gòu)造函數(shù)取構(gòu)造animal類(lèi)的對(duì)象,然后才去調(diào)用fish類(lèi)的對(duì)象,,當(dāng)fish;類(lèi)對(duì)象轉(zhuǎn)換成aniaml
對(duì)象時(shí),該對(duì)象被認(rèn)為是元對(duì)象整個(gè)內(nèi)存模型中的上半部分(fish對(duì)象的內(nèi)存包含(類(lèi)aniam累的對(duì)象站的內(nèi)存和類(lèi)fish對(duì)象自身占的額內(nèi)存)),主要是因?yàn)閒ish類(lèi)
是繼承animal類(lèi)的,fish的對(duì)象j中包含animal類(lèi)的函數(shù)以及成員。
2、靜態(tài)多態(tài)性
函數(shù)的重載主要有兩種:
1、函數(shù)相同,但是參數(shù)的個(gè)數(shù)和參數(shù)類(lèi)型不同
2、函數(shù)的參數(shù)相同但是屬于不同的類(lèi)
調(diào)用形式: 對(duì)象名。函數(shù) ?或者 函數(shù)名前加上類(lèi)::,作用域符::,表示調(diào)用這個(gè)類(lèi)的::函數(shù)
#include<iostream> using namespace std; class point {int x, y; public:point(int a, int b){x = a;y = b;}double area(){return 0;} }; class circle :public point {int r; public:circle(int a, int b,int c) :point(a, b), r(c){}double area(){return 3.14*r*r;} };int main() {point pob(16, 15);circle cob(20, 20, 10);cout << "pob.area" << pob.area() << endl;cout << "cob.area()" << cob.area() << endl;cout << cob.point::area() << endl;//表示派生類(lèi)對(duì)象調(diào)用基類(lèi)成員函數(shù)system("pause");return 0; }總結(jié)
以上是生活随笔為你收集整理的面向对象的多态性(1)的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 运载符重载
- 下一篇: RANSC算法(随机样本一致性)