C 語言到 C 過度

2021-08-14 09:09:20 字數 3515 閱讀 3608

c語言和c++ 的區別:

c語言存在很多的灰色地帶,沒有深思熟慮的設計過程,殘留量過多低階語言的特徵例如直接利用指標進行記憶體操作,c語言的目標就是高效。

c語言是面向過程程式設計設計:資料結構和演算法,

問題的存在 軟體可重用性差,軟體可維護性差,構建的軟體無法滿足使用者需求。

c++物件導向程式設計:由現實世界建立軟體模型;

特點:直接分析使用者需求中設計的各個實體,在**中描述現實世界中的實體,在**中關聯各個實體協同工作解決問題,

優勢:構建的軟體能夠適應使用者需求的不斷變化,直接利用面向過程方法的有事而避開起劣勢。

高效的物件導向的語言,並且能夠相容已經存在的**。

c++對c的加強:

命名空間:命名空間將全句作用域分成不同的部分,不同命名空間的識別符號可以同名而不會發生衝突,命名空間可以巢狀,全域性作用域也叫做預設命名空間。

命名空間的定義:

/**

namespace 是c++中的關鍵字,用來定義乙個命名空間,語法格式為:

namespace name

name是命名空間的名字,它裡面可以包含變數、函式、類、typedef、#define 等,最後由包圍

**/

使用域解析符:

::是乙個新符號,稱為域解析操作符,在c++中用來指明要使用的命名空間。

namespacea::a = 10; // 使用命名空間 namespacea中的變數a

// 全域性變數a

int a;

// 2.3、命名空間之間命名衝突:使用域解析符解決衝突

// 和全域性空間變數命名衝突

int main3()

將std直接宣告在所有函式外部,這樣雖然使用方便,但是中大型專案開發中是不被推薦的,這樣做怎家了命名衝突的風險,我推薦在函式內部宣告std;

// c語言中的變數都必須在作用域開始的位置定義!!

// c++中更強調語言的「實用性」,所有的變數都可以在需要使用時再定義。

for (int i = 0; i < 10; i++)

register關鍵字的變化:

register關鍵字請求「編譯器」將區域性變數儲存於暫存器中

c語言中無法取得register變數位址

在c++中依然支援register關鍵字

1、c++編譯器有自己的優化方式,不使用register也可能做優化

2、c++中可以取得register變數的位址

c++編譯器發現程式中需要取register變數的位址時,register對變數的宣告變得無效。

變數檢測加強:

// 在c語言中重複定義多個全域性變數是合法的

// 這些同名的全域性變數最終都會被鏈結全域性資料區的同乙個位址空間上

int g_a;

int g_a = 1;

struct型別加強

c語言的struct定義了一組變數的集合,c編譯器並不認為這是一種新的型別;

c++中的struct 是乙個新型別定義宣告;

struct student

int main() ;

return 0; }
c++ 中所有變數和函式都必須要有型別;

c語言中函式的一些不好的使用方式:

// 1 函式可以沒有返回引數型別

f()

// 2 函式引數可以沒有資料型別

g(i)

// 1 函式可以沒有返回引數型別

f()

// 2 函式引數可以沒有資料型別

g(i)

int main()

c++中的加強

在c語言中

intf();表示返回值是int,接受任意引數的函式;

int(void);表示返回值為int無參函式;

在c++中

int();和int(void)具有相同意義,都表示返回值為int的無參函式;c++更加強調型別,任意的程式元素都必須顯示指明型別

新增bool型別的關鍵字:

c++中的布林型別

c++在c語言的基本型別系統之上增加了bool

c++中的bool可取的值只有true和false

理論上bool只占用乙個位元組,

如果多個bool變數定義在一起,可能會各佔乙個bit,這取決於編譯器的實現

true代表真值,編譯器內部用1來表示

false代表非真值,編譯器內部用0來表示

三目運算子的增強:

// c語言中表示式的結果 放在什麼地方? ==> 暫存器

// 1

// 表示式返回的是乙個值,是乙個數

// 在c++中,表示式返回的是變數本身

// 2 如何做到的

// 讓表示式返回乙個記憶體空間..記憶體的首位址 指標

// 在c語言中如何實現c++的效果

// 3 本質

// c++編譯器自己做了取位址的操作

int main()

c語言返回變數的值c++語言返回的是變數本身;

c語言中的三目運算子返回的是變數值,不嫩作為左值使用

c++中的三目運算子可直接返回變數本身,因此可以出現在程式的任何地方

注意:三目運算子可能返回的值中如果有乙個是常量值,則不能作為左值使用(a < b ? 1 : b )= 30;

c++中的const

c和c++中的const比較

c語言中的const

int main() c++中的const

int main() c++編譯器對const常量的處理

當碰見常量宣告時,在符號表中放入常量 ==> 問題:那又如何解釋取位址

編譯過程中若發現對const使用了extern或者&操作符,則給對應的常量分配儲存空間(相容c)

但是編譯過程中若發現使用常量則直接以符號表中的值替換,即使給該常量分配了空間,也並不使用裡面的值

const和#define

不同之處:

對比加深

c++中的const常量類似於巨集定義

const int c = 5; ≈ #define c 5

c++中的const常量與巨集定義不同

const常量是由編譯器處理的,提供型別檢查和作用域檢查

巨集定義由預處理器處理,單純的文字替換

相同之處:

int main() ;

for (int i = 0; i < a+b; i++)

return 0; }c++中的const修飾的,是乙個真正的常量,而不是c中變數(唯讀)。在const修飾的常量編譯期間,就已經確定下來了

從C語言到C 語言

c 讀作 c加加 是 c plus plus 的簡稱。顧名思義,c 是在c語言 的基礎上增加新特性。從語法上看,c語言是 c 的一部分,c語言 幾乎不用修改就能夠以 c 的方式編譯。對於c和c 的關係,有很多種說法,新人很容易認為c 是c的公升級版,c 比c要高階,c 高大上,c過時了,這種想法不一...

c語言到c 基礎

資料型別 1.c 比c語言多出個布林型別 bool 真為true,假為false 如 int a 0 c語言中邏輯判斷 if a 1 else bool int a 0 c 中的新邏輯判斷 if a else 好處 讓程式更加簡潔易懂!初始化方法 2,c 新增直接初始化如 int x 1024 相比...

從C語言到C (一)

1.輸入輸出流 using std cout 標準輸出流 using std endl 換行 cout em1.t a cout endl 2.結構體的宣告 在c 裡,不需要加struct 3.類的定義 類名稱前面加c,類成員前面加m 如果不加關鍵字public和 預設為 private 即如果你在...