關於c++的多態,多態

來源:互聯網
上載者:User

關於c++的多態,多態

前不久面了一下金山,一面比較順利。二面的時候面試官主要問了問c++的問題,貌似回答的不好,後來又問道關於多態的問題,讓我描述一下,或者寫一個例子出來,我當時就2了,故在此溫習一下。
多態,字面意思就是“多種狀態”。在oop(物件導向)中,介面的多種不同的實現方式即為多態。多態性是允許你將父物件設定成為和一個或更多他的子物件相等的技術,賦值以後,父物件就可以根據當前賦給它的子物件的特性以不同的方式運作。簡單的說,就是:允許將子類型的指標賦值給父類型的指標。
在c++中,實現多態有以下方法:虛函數,抽象類別,重寫,覆蓋,模板。
我先以虛函數去實現一個。

#include <iostream>using namespace std;class A{public:A(){}~A(){}virtual void fun(){cout<<"this is A"<<endl;}};class B:public A{public:B(){}~B(){}void fun(){cout<<"this is B"<<endl;}};int main(){A *a = new A();A *b = new B();a->fun();b->fun();if (a != NULL)delete a;if (b != NULL)delete b;return 0;}

運行結果如下:







用標準C怎實現多態

struct Base
{
int (*foo_ptr)(Base *);
};

struct Derived_A
{
struct Base;

int x;
};

int Derived_A_foo(Base *p)
{
return ((Derived_A *)p)->x;
}

void Derived_A_Construct(Derived_A *p)
{
p->foo_ptr = Derived_A_foo;
p->x = 0;
}

struct Derived_A a;
struct Base *x = (Base *)a;

Derived_A_Construct(&a);

x->foo_ptr(x);

不是嚴格的做法,就是說明大概的意思
 
c加加多態的種類,各自實現的機制

多態,即“一個介面,多種實現”。
C++中的多態,可分為靜態多態,包括:函數重載、模板;動態多態,包括:虛函數。
靜態,在編譯時間就要知道調用函數的全部資訊,而動態,直到運行時才確定具體調用的函數。具體可以分別查一下”函數重載“,”模板“,”虛函數“這三個關鍵字看看。
 

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.