大部分人對C語言與C++的關係有不同的看法,有的人認爲C++是C語言的一種昇華,有的則認爲他們是兩種完全不同的語言。其實這個問題,我覺得較真是毫無意義的,因爲每個人的水平能力不同認知就會不同,對於我個人來說,在剛開始學C++的時候,尤其是剛學到基於對象的時候,心裏想“哦操,誰這完全是兩種語言,C語言的思維壓根用不上,一用就懵逼!”。當時腦袋轉不過來,因爲C語言的思維方式(順序結構)根深蒂固,一開始有點排斥,可是知道我將C++基本學完,又有了新的認識,C++就是C語言的一個生化(個人觀點),可能隨着知識的深入,每個階段都會有不同的感受,沒必要較真。但是這個過程有必要存在,它標誌着我對他有了新的認識,說明我在進步。
上面一段是我對C++的認知的一個變化。也是我對於C++整體認知的一個過程縮影。
一、整體得去認識一下C++
一提到C++我想大部分人會說的下一句話“面嚮對象語言”。當初我也在“面向對象”上犯了一個很大的錯誤,我以爲我面對的所有C++語法都是面向對象,這導致了我從C語言轉到C++時花費了好長時間,因爲剛開始學沒找到C++與C語言的區別,不都是面向過程麼?這差點導致我放棄學C++。(以爲自己智商真的不夠用)還好沒放棄。
誒!總結一下無非是瞎跟着別人的腳步走,別人說C++就是面嚮對象語言,我就說C++就是面嚮對象語言,(當初什麼都不懂)。饒了很大一圈,可我並不認爲這是一件壞事,能發現別人的說法中存在不足、漏洞,說明我自己是在思考在進步。
1、C++語言特性:三部分也是三個階段
C++語言其實講了語言的三種特性:(三部分)
1)面向過程
C++是基於C語言而開發(還有一種語言),基於C語言也就是兼容C語言。所以我們在大部分參考書中可以看到,前幾章基本上是在說C語言的知識,這也是爲什麼我們會說C++語言的第一個特性是面向過程(因爲他是基於C語言開發的)。
2)基於對象
學着學着我們會認識一個新的單詞class,C++把它他叫做類。類的出現也預示着對象的出現。
我們把不帶有繼承或多態的單一類的設計叫做基於對象設計。(這是我自己總結的)
很多人願意將class和C語言中的struct作類比。但是這裏一定要強調他們二者區別,其實我更喜歡將C++中的class定義爲是C語言中的struct的一個昇華。(二者有本質上的區別)語法上起碼就不一樣,我們要區分C語言中的struct和C++中的class和C++中的struct。
C語言中struct與c++中的class和c++中的struct區別:
上圖說明c++中的class完全可以和c++中的struct看做是一樣的。
1、C語言中struct與c++中的class區別:
代碼如下:
#include<stdio.h>
typedef struct
{
int num; // 定義一個變量
//試圖像C++那樣定義或聲明一個函數
void func(void);
void func2(void)
{
}
//定義一個函數指針
int (*p)();
}student;
int main(void)
{
return 0;
}
2、C++struct與c++中的class區別:
代碼如下:
#include<iostream>
typedef struct
{
int num; // 定義一個變量
}student;
class C
{
int num;
};
int main(void)
{
student stu1;
stu1.num; // 可以訪問說明c++中的struct默認訪問權限是public。
C c1;
c1.num; // 說用c++中的class默認訪問權限是private。
return 0;
}
3)面向對象