C語言和C 之物件導向的引入 oop

2021-08-07 16:21:33 字數 1616 閱讀 1418

c++語言是在c語言的基上新增了物件導向、模板等現代程式語言的特性而發展起來的。兩者非常相似,在對硬體資源的操作上,c語言更加直接,它的重點在於演算法和資料結構,如強大的linux底層裝置驅動使用的就是c語言。而c++則更傾向於設計程式,它首要考慮的是如何構造乙個物件模型,讓這個模型能夠契合與之對應的實際問題,這樣就可以通過獲取物件的狀態資訊得到輸出或實現對過程或事務的控制。c語言是面向過程語言,而c++則是物件導向的語言,下面我們還是通過乙個簡單c和c++的程式來說明一下何謂「物件」,以及它的好處。

首先我們寫一段這樣的**:

**中我們需要列印出乙個人的名字,年齡,以及它的工作內容,使用c語言來編寫的話我們需要用乙個結構體來封裝「人」這個物件所帶有的屬性,包括他自己對個人的介紹,c語言的**如下,**中我做了詳細的備註來進行說明:

#include /* "人"這個結構體的宣告 */

struct person;

/* 定義乙個函式用於賦給結構體內部函式指標,相當於去實體化函式指標 */

void printinfo(struct person *per)

int main(int argc, char **argv)

, ,

}; /* 呼叫結構體陣列裡面各自的函式指標實現個人自我介紹 */

persons[0].printinfo(&persons[0]);

persons[1].printinfo(&persons[1]);

return 0;

}

這個程式實現功能上是完全沒有任何問題的,但是有些地方特別彆扭,又顯示麻煩,像我們的結構體內部定義了乙個函式指標,卻不能直接實現功能要跑到外面去實體化函式指標,再者後面的「自我介紹」那個函式指標的呼叫「persons[0].printinfo(&persons[0]);」這句前面明明說明了是persons[0],但是後面你想自我介紹的時候你又要獲取多一次persons[0]的位址,這樣程式看起來感覺有點多餘和冗餘,但是沒辦法,這就是c語言。因此,我們能否改進呢?答案是當然可以,使用c++,具體實現我們先看**,如下:

#include struct person

};int main(int argc, char **argv)

, ,

}; persons[0].printinfo();

persons[1].printinfo();

return 0;

}

從下面這段cpp的**我們可以明顯看出來比前面那段c的**要簡短明了很多,這就是c++程式的好處,他可以讓**和物件更加緊湊,直接在結構體核心實體化物件,使人這個物件的描述能力更加強,至此我們可以說這是乙個面向「物件」的語言。當然,c++語言有專門描述物件的語法結構叫「類」,我們可以修改上面結構體的**為類的方式,在c++裡面也普遍使用類定義的方式,如下:

#include /* 類宣告 */

class person

};int main(int argc, char **argv)

, ,

}; persons[0].printinfo();

persons[1].printinfo();

return 0;

}

C 之物件導向

分享一下我老師大神的人工智慧教程!零基礎,通俗易懂!話說三國時期,曹操帶領百萬大軍攻打東吳,大軍在長江赤壁駐紮,軍船連成一片,眼看就要滅掉東吳,統一天下,曹操大悅,於是晏眾文武,在酒席間,曹操詩興大發,不覺吟道 喝酒唱歌,人生真爽 眾文武其呼 丞相好詩!於是一臣子速命印刷工匠刻版印刷,以便流傳天下。...

C 之物件導向 上

物件導向 上 一,引用的應用 swap.cpp include using namespace std int main void void swap1 int a,int b 傳遞的是實參a,b的複製,也就是副本 void swap2 int a,int b 傳遞的是實參a,b的位址 void s...

C 學習雜記之 物件導向

1 物件是類的乙個例項 instance 重要的是類的設計而不是物件的設計,類要注重行為的設計而不是資料 的設計,所以類中先public 成員函式。2 繼承與程式復用性的關係 1 b繼承a,則b必須是a的一種 如果b是a的一部分,則不允許b繼承a的功能 2 通過繼承,實現了後來寫的程式可以使用以前寫...