面向過程 ——步驟化:是分析出解決問題所需要的步驟,然后用函數(shù)把這些步驟一步一步實(shí)現(xiàn),使用的時(shí)候一個(gè)一個(gè)依次調(diào)用就可以了。
面向?qū)ο?/strong> ——行為化:面向?qū)ο笫前颜麄€(gè)需求按照特點(diǎn)、功能劃分,將這些存在共性的部分封裝成對象,創(chuàng)建了對象不是為了完成某一個(gè)步驟,而是描述某個(gè)事物在解決問題的步驟中的行為
**面向過程和面向?qū)ο蟮膬?yōu)缺點(diǎn):**面向過程:
- 優(yōu)點(diǎn):性能上它是優(yōu)于面向?qū)ο蟮模驗(yàn)轭愒谡{(diào)用的時(shí)候需要實(shí)例化,開銷過大。
- 缺點(diǎn):不易維護(hù)、復(fù)用、擴(kuò)展
面向?qū)ο螅?/p>
- 優(yōu)點(diǎn):易維護(hù)、易復(fù)用、易擴(kuò)展,由于面向?qū)ο笥蟹庋b、繼承、多態(tài)性的特性,可以設(shè)計(jì)出低耦合的系統(tǒng),使系統(tǒng)更加靈活、更加易于維護(hù)
- 缺點(diǎn):
- 低耦合:簡單的理解就是說,模塊與模塊之間盡可能的獨(dú)立,兩者之間的關(guān)系盡可能簡單,盡量使其獨(dú)立的完成成一些子功能,這避免了牽一發(fā)而動(dòng)全身的問題。
- 性能比面向過程低
了解完面向?qū)ο蠛兔嫦蜻^程的基本概念之后,我們來看一下類和對象是什么?
**什么是類?**類,即類別:類是具有相似屬性和行為的一組實(shí)例集合
**什么是對象?**對象,即類的實(shí)例:現(xiàn)實(shí)世界是由各種各樣的事物組成,包括真實(shí)的事物和抽象的事物。例如,人、動(dòng)物、汽車(真實(shí)的事物)和程序、直線(抽象的事物)等。
每一類事物都有自己特定的屬性(如大小、形狀、重量等)和行為(如生長、行走、轉(zhuǎn)彎、運(yùn)算等),人們通過研究事物的屬性和行為而認(rèn)識事物。在計(jì)算機(jī)科學(xué)中將這些現(xiàn)實(shí)世界中的事物稱之為對象。
面向?qū)ο笏拇筇卣?/strong>
- 抽象抽象是人類認(rèn)識問題的最基本手段之一。抽象是指對具體問題(對象)進(jìn)行概括,抽出一類對象的公共屬性和行為并加以描述的過程。類是對象的抽象,對象是類的特例。
- 封裝封裝是把每個(gè)對象的數(shù)據(jù)(屬性)和操作(行為)包裝在一個(gè)類中。一旦定義了對象的屬性和行為,則必須決定哪些屬性和行為只用于表示內(nèi)部狀態(tài),哪些屬性和行為在外部是可見的。 封裝保證了模塊具有較好的獨(dú)立性,使得程序維護(hù)修改較為容易。
- 繼承繼承是指一個(gè)新類可以從現(xiàn)有的類派生而來。新類繼承了現(xiàn)有類的特性,包括一些屬性和行為,并且可以修改或增加新的屬性和行為,使之適合具體的需要。繼承為了重用父類代碼,同時(shí)為實(shí)現(xiàn)多態(tài)性作準(zhǔn)備。
- 多態(tài)多態(tài)性是指類中具有相似功能的同名函數(shù),并根據(jù)不同類的對象對同一消息產(chǎn)生的不同行為。
如何定義類
我們先不說多么高深的東西,大家都學(xué)過C語言吧!在C++中,我們可以使用結(jié)構(gòu)體表示類。
#include
using namespace std;
struct Stu //定義學(xué)生結(jié)構(gòu)
{
int id;
int age;
char name[10];
};
int main()
{
Stu cPlus;//前面講過在C++中可以省略,struct關(guān)鍵字
cPlus.id = 100;
cPlus.age = 5;
strcpy(cPlus.name, "C語言Plus");
cout << cPlus.id << " " << cPlus.age << " " << cPlus.name << endl;
return 0;
}
output:100 5 C語言Plus
這種寫法大家都非常熟悉吧,不知道大家發(fā)現(xiàn)沒有,如果我要輸出學(xué)生的所有信息我就需要寫一行輸出代碼,有的伙伴會(huì)說,我們可以把輸出封裝成函數(shù),確實(shí)可以。
void showStuInfo(Stu s)
{
cout << s.id << " " << s.age << " " << s.name << endl;
}
但是這樣做也有不方便之處,每次輸出時(shí),需要傳入一個(gè)學(xué)生的參數(shù),麻煩。這里我們可以使用面向?qū)ο蟮乃枷耄研袨?輸出信息)也封裝到結(jié)構(gòu)體中(在C語言中是不允許的)。
struct Stu //定義學(xué)生結(jié)構(gòu)
{
int id;
int age;
char name[10];
void showStuInfo(Stu s)
{
cout << s.id << " " << s.age << " " << s.name << endl;
}
};
訪問方法:cPlus.showStuInfo(cPlus);
訪問成員函數(shù)的方法,和訪問成員變量的方法一樣,用成員運(yùn)算符.即可,但是這里大家又會(huì)發(fā)現(xiàn)一個(gè)問題,既然是哦通過cPlus訪問的輸出函數(shù),那為啥還要傳一個(gè)cPlus進(jìn)去,不是多此一舉嗎?
確實(shí),如果在結(jié)構(gòu)體內(nèi)部函數(shù)中,訪問自己的成員就不需要通過傳參來使用了,可以直接使用,如:
struct Stu //定義學(xué)生結(jié)構(gòu)
{
int id;
int age;
char name[10];
void showStuInfo()
{
cout << id << " " << age << " " << name << endl;
}
};
很簡單吧,那么同樣,對于初始化函數(shù),咱們也可以把它寫到結(jié)構(gòu)體里面去
struct Stu //定義學(xué)生結(jié)構(gòu)
{
int id;
int age;
char name[10];
void init(int sid = 0, int sage = 0, const char* sname = "NULL")
{
id = sid;
age = sage;
strcpy(name, sname);
}
void showStuInfo()
{
cout << id << " " << age << " " << name << endl;
}
};
int main()
{
Stu cPlus;//前面講過在C++中可以省略,struct關(guān)鍵字
cPlus.init();
cPlus.showStuInfo();
return 0;
}
-
分析
+關(guān)注
關(guān)注
2文章
134瀏覽量
33610 -
函數(shù)
+關(guān)注
關(guān)注
3文章
4376瀏覽量
64497 -
調(diào)用
+關(guān)注
關(guān)注
0文章
8瀏覽量
3371
發(fā)布評論請先 登錄
C語言實(shí)現(xiàn)面向對象的方式 C++中的class的運(yùn)行原理
基于C/C++面向對象的方式封裝socket通信類
C++筆記005:用面向過程和面向對象方法求解圓形面積
什么是向對象?什么叫面向過程
Visual C++面向對象與可視化程序設(shè)計(jì)習(xí)題解析與編程實(shí)

面向對象程序設(shè)計(jì)—C++語言描述_PDF版
C++語言和面向對象程序設(shè)計(jì)教程
為什么要用C語言實(shí)現(xiàn)面向對象

評論