當前位置:首頁 » 編程語言 » c語言如何實現多態
擴展閱讀
webinf下怎麼引入js 2023-08-31 21:54:13
堡壘機怎麼打開web 2023-08-31 21:54:11

c語言如何實現多態

發布時間: 2022-04-14 10:12:30

㈠ C++中怎麼用多態實現函數的多變參數

樓主有些誤解了,c語言中的確有你說的多變參數的函數,比如printf()scanf()等等,它們的實現也的確是用宏來實現了,具體實現不贅述,C++是C的超集,自然也可以用這種方式解決。
下面說多態,其實多態是面向對象的特徵,具體到C++中,函數的重載,重寫,以及虛函數都是多態的體現,而類似於C中的多變函數,則是用函數的重載實現的,舉個例子
class A
{
public:
void func(int);
void func(float);
void func(long);
};
void A::func(int x)
{
cout << "int version" << endl;
}
void A::func(float x)
{
cout << "float version" << endl;
}
void A::func(long x)
{
cout<< "long version" << endl;
}

void main()
{
int a;
float b;
long c;
func(c);
func(b);
func(a);
}
類A中的func()成員函數有3個重載版本,重載函數是通過對應不同的參數來識別時調用哪一個函數,這就是類似C中的可變函數。
(重載只是C++中多態的一角,想更詳細的了解的,我想市面上任何一本C++
的書都會講到,不過重點可能都是虛函數,重載和重寫比較容易理解)
----------------我是無視上面的分割線--------------------------
你的問題裡面不是說C++么
C語言怎麼實現的看我轉的這篇文章吧

㈡ 如何實現多態

在編程語言和類型論中,多態(英語:polymorphism)指為不同數據類型的實體提供統一的介面。 多態類型(英語:polymorphic type)可以將自身所支持的操作套用到其它類型的值上。

計算機程序運行時,相同的消息可能會送給多個不同的類別之對象,而系統可依據對象所屬類別,引發對應類別的方法,而有不同的行為。簡單來說,所謂多態意指相同的消息給予不同的對象會引發不同的動作。
多態也可定義為「一種將不同的特殊行為和單個泛化記號相關聯的能力」。

(2)c語言如何實現多態擴展閱讀:

多態可分為變數多態與函數多態。變數多態是指:基類型的變數(對於C++是引用或指針)可以被賦值基類型對象,也可以被賦值派生類型的對象。函數多態是指,相同的函數調用界面(函數名與實參表),傳送給一個對象變數,可以有不同的行為,這視該對象變數所指向的對象類型而定。因此,變數多態是函數多態的基礎。
多態還可分為:動態多態(dynamic polymorphism)和靜態多態(static polymorphism)。

對於C++語言,帶變數的宏和函數重載(function overload)機制也允許將不同的特殊行為和單個泛化記號相關聯。然而,習慣上並不將這種函數多態(function polymorphism)、宏多態(macro polymorphism)展現出來的行為稱為多態(或靜態多態),否則就連C語言也具有宏多態了。談及多態時,默認就是指動態多態,而靜態多態則是指基於模板的多態。

㈢ C語言中模擬多態

請你到專業網站去咨詢一下吧,這里關注較少。

㈣ C語言是怎樣實現封裝,繼承,多態的

封裝,繼承,多態的是C++的面向對象的特性,C語言不具備這些特性。

㈤ 這個要實現多態 C語言 第一次求和第二次求最大值第三次求最小值。 輸入兩個數。 我想問下 函數指針

這道題想在一個函數里做3種功能(求和、最大值、最小值),有2種方法。
1.直接在process函數里寫3個小函數;
2.把3個小函數放到外面,通過函數指針傳進來調用,本題要求的是第二種。
開始了哦!
void process(int nFlag, int (*p)(int, int), int nFirst, int nSecond)
{
switch(nFlag)
{
case 1:
p(nFirst, nSecond);//求和
break;
case 2:
p(nFirst, nSecond);//求最大值
break;
case 3:
p(nFirst, nSecond);//求最小值
break;
}
}

int GetSum(int, int)
{
...
}

int GetMax(int, int)
{
...
}

int GetMin(int, int)
{
...
}

void main()
{
process(1, &GetSum, 1, 2);
process(2, &GetMax, 1, 2);
process(3, &GetMin, 1, 2);
}

㈥ c++多態的實現方式有哪些

c++是一種編程語言,當然只有一種。但是基於c++的編程平台有很多種。

在這些平台上編程序,用的語言是c++的,但是在一些細節上會有所不同。我接觸過的主要有vc++,symbian c++,borland c++,它們都是基於c++的,但是編程風格或方式稍有不同。

你學c++要打好基礎,先學好c++語言。看書的時候可以找一些書名為「c++編程語言」之類的書,只有在學好c++語言後,才可以去具體的學習某個平台的編程教程。

一般來說,多態分為兩種,靜態多態和動態多態。靜態多態也稱編譯時多態,主要包括模板和重載。而動態多態則是通過類的繼承和虛函數來實現,當基類和子類擁有同名同參同返回的方法,且該方法聲明為虛方法。

當基類對象,指針,引用指向的是派生類的對象的時候,基類對象,指針,引用在調用基類的虛函數,實際上調用的是派生類函數。這就是動態多態。

靜態多態的實現。

靜態多態靠編譯器來實現,簡單來說就是編譯器對原來的函數名進行修飾,在c語言中,函數無法重載,是因為,c編譯器在修飾函數時,只是簡單的在函數名前加上下劃線」_」 ,不過從gcc編譯器編譯之後發現函數名並不會發生變化。

而c++編譯器不同,它根據函數參數的類型,個數來對函數名進行修飾,這就使得函數可以重載,同理,模板也是可以實現的,針對不同類型的實參來產生對應的特化的函數,通過增加修飾,使得不同的類型參數的函數得以區分。

㈦ C語言中怎麼實現多態

不能,C是過程性語言,不支持多態這種對象性的特徵。

㈧ 如何通過c語言實現封裝,繼承和多態

用c++吧,用c語言實現的有點兒勉強

㈨ 如何用c語言實現多態

最簡單的做法是在結構體里存函數指針,然後初始化結構體的時候將函數的地址賦值給它。

復雜一點的,就得按照C++的多態原理,用虛函數表(其實就是能記錄函數名對應的函數地址就好)記錄每種結構體的成員函數地址,然後每個結構體里多存一個虛函數表的地址。。。然後調用函數的時候查到函數地址強轉成函數類型然後調用。。。這個可以自己研究一下c++的虛函數表機制。

㈩ C語言的多態是否是類似於用結構指針的強制轉換來實現的,具體實現方式類似於Linux萬能鏈表

肯定不是的啊。

這里說的多態應該是C++面向對象的多態性質。

是由於類繼承之後的一種特性。


指針轉換,比如 int* a =(int *)p;

其實a和p都是兩個4bytes的地址數據,強制轉換就是把數值轉了了一下。


而多態是體現在運行時,

比如

class man 繼承自 class person

class woman 繼承自 class person


假設有這樣一段代碼:

if(a==1){
p=newman;
}
else{
p=newwoman;
}
那現在p可能是man或者woman了,不運行是實現不知道的,這就是多態的一種體現。

具體的p的屬性實際存在內存當中的,和指針強制轉換不一樣。