面向過程 ——步驟化:是分析出解決問題所需要的步驟,然后用函數把這些步驟一步一步實現,使用的時候一個一個依次調用就可以了。
面向對象 ——行為化:面向對象是把整個需求按照特點、功能劃分,將這些存在共性的部分封裝成對象,創建了對象不是為了完成某一個步驟,而是描述某個事物在解決問題的步驟中的行為
**面向過程和面向對象的優缺點:**面向過程:
- 優點:性能上它是優于面向對象的,因為類在調用的時候需要實例化,開銷過大。
- 缺點:不易維護、復用、擴展
面向對象:
- 優點:易維護、易復用、易擴展,由于面向對象有封裝、繼承、多態性的特性,可以設計出低耦合的系統,使系統更加靈活、更加易于維護
- 缺點:
- 低耦合:簡單的理解就是說,模塊與模塊之間盡可能的獨立,兩者之間的關系盡可能簡單,盡量使其獨立的完成成一些子功能,這避免了牽一發而動全身的問題。
- 性能比面向過程低
了解完面向對象和面向過程的基本概念之后,我們來看一下類和對象是什么?
**什么是類?**類,即類別:類是具有相似屬性和行為的一組實例集合
**什么是對象?**對象,即類的實例:現實世界是由各種各樣的事物組成,包括真實的事物和抽象的事物。例如,人、動物、汽車(真實的事物)和程序、直線(抽象的事物)等。
每一類事物都有自己特定的屬性(如大小、形狀、重量等)和行為(如生長、行走、轉彎、運算等),人們通過研究事物的屬性和行為而認識事物。在計算機科學中將這些現實世界中的事物稱之為對象。
面向對象四大特征
- 抽象抽象是人類認識問題的最基本手段之一。抽象是指對具體問題(對象)進行概括,抽出一類對象的公共屬性和行為并加以描述的過程。類是對象的抽象,對象是類的特例。
- 封裝封裝是把每個對象的數據(屬性)和操作(行為)包裝在一個類中。一旦定義了對象的屬性和行為,則必須決定哪些屬性和行為只用于表示內部狀態,哪些屬性和行為在外部是可見的。 封裝保證了模塊具有較好的獨立性,使得程序維護修改較為容易。
- 繼承繼承是指一個新類可以從現有的類派生而來。新類繼承了現有類的特性,包括一些屬性和行為,并且可以修改或增加新的屬性和行為,使之適合具體的需要。繼承為了重用父類代碼,同時為實現多態性作準備。
- 多態多態性是指類中具有相似功能的同名函數,并根據不同類的對象對同一消息產生的不同行為。
如何定義類
我們先不說多么高深的東西,大家都學過C語言吧!在C++中,我們可以使用結構體表示類。
#include
using namespace std;
struct Stu //定義學生結構
{
int id;
int age;
char name[10];
};
int main()
{
Stu cPlus;//前面講過在C++中可以省略,struct關鍵字
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
這種寫法大家都非常熟悉吧,不知道大家發現沒有,如果我要輸出學生的所有信息我就需要寫一行輸出代碼,有的伙伴會說,我們可以把輸出封裝成函數,確實可以。
void showStuInfo(Stu s)
{
cout << s.id << " " << s.age << " " << s.name << endl;
}
但是這樣做也有不方便之處,每次輸出時,需要傳入一個學生的參數,麻煩。這里我們可以使用面向對象的思想,把行為(輸出信息)也封裝到結構體中(在C語言中是不允許的)。
struct Stu //定義學生結構
{
int id;
int age;
char name[10];
void showStuInfo(Stu s)
{
cout << s.id << " " << s.age << " " << s.name << endl;
}
};
訪問方法:cPlus.showStuInfo(cPlus);
訪問成員函數的方法,和訪問成員變量的方法一樣,用成員運算符.即可,但是這里大家又會發現一個問題,既然是哦通過cPlus訪問的輸出函數,那為啥還要傳一個cPlus進去,不是多此一舉嗎?
確實,如果在結構體內部函數中,訪問自己的成員就不需要通過傳參來使用了,可以直接使用,如:
struct Stu //定義學生結構
{
int id;
int age;
char name[10];
void showStuInfo()
{
cout << id << " " << age << " " << name << endl;
}
};
很簡單吧,那么同樣,對于初始化函數,咱們也可以把它寫到結構體里面去
struct Stu //定義學生結構
{
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關鍵字
cPlus.init();
cPlus.showStuInfo();
return 0;
}
-
分析
+關注
關注
2文章
134瀏覽量
33302 -
函數
+關注
關注
3文章
4327瀏覽量
62573 -
調用
+關注
關注
0文章
8瀏覽量
3226
發布評論請先 登錄
相關推薦
評論