從C到C++

頭文件:C++的標準輸入輸出頭文件#include <iostream>。一般還配有using namespace std;表示使用std名命空間。


在C++中,聲明一個函數時,可以爲函數的參數指定默認值。當調用該函數時,如果沒有參數,將使用默認值作爲參數。


struct與class:

在C語言中struct定義結構體,在C++中struct與class都是定義類,區別在struct默認public,class默認private。

在.c文件中訪問結構體,不可以省略struct

typedef struct Node
{
	int data;
	struct Node *next;//不可以省略struct
}Node,*Pstack;

但是再.cpp文件中struct也是類。可以省略

 並且.c文件中空結構體,在VS中不能通過編譯,在gcc下空結構體的大小爲0。在.cpp中空類的大小爲1,因爲類中有默認的構造函數等,調用合適的構造函數CGoods(CGoods *this)肯定會有this指針,而爲了放這個指針則肯定會至少有一字節空間。


面嚮對象語言:

四大特徵:封裝(在語言上是通過訪問限定符體現的:public private)        繼承       多態       抽象         三大:去掉抽象。

如何用oop思想來設計代碼(軟件):實體(屬性和行爲)  ->  ADT(abstract  data  type)  ->  類  ->  對象

類並不佔空間,對象佔空間。類相當於圖紙,對象相當於房子

oop語言:程序=對象+對象+對象。。。+消息交互

類與類之間常用關係:組合   繼承。


引用:

類型名 &引用名 = 同類型的某變量名; 
eg:
int a = 10;
int & b = a;

引用相當起別名。

注意:

1、引用實際是通過指針實現的。引用實際上就是一個常量指針。目標是爲了提供比指針更高的安全性,因爲常量指針一旦與變量地址綁定將不能更改,這樣降低了指針的危險係數,它提供了一種一對一的指針。參數傳引用的方法類似與指針。

2、引用在內存中佔4個字節。因爲在表達式中,使用引用就像使用變量本身,所以使用sizeof運算符是得不到引用本身的大小。要想得到引用的大小,我們可以定義一個類,該類的私有成員是一個引用,在使用sizeof來計算該類的大小。

3、引用不佔空間的意思是不佔用對象空間,不表示不佔指針的少量空間。引用類型的變量會佔用內存空間,佔用的內存空間的大小和指針類型的大小是相同的。 從上面的彙編代碼可以看出,雖然引用是一個對象的別名,但是在彙編層面,和指針是一樣的。

4,定義引用一定要初始化。引用只能引用變量。

5、常引用和常指針類似,都是不能通過常引用取修改其引用的內容。


內聯函數:inline

一般的函數使用雖然能夠避免代碼重寫多次,還能減少可執行程序的體積,但也會造成運行時間上的開銷。雖然說這個開銷可以忽略不計,但如果函數內部語句很少,本身執行時間還不如調用函數所需的時間長,我們就可以將這個函數寫爲內聯函數。

在函數前加上inline關鍵字即可。內聯函數和普通函數的區別在於:當編譯器處理調用內聯函數的語句時,不會將該語句編譯成函數調用的指令,而是直接將整個函數體的代碼插人調用語句處,就像整個函數體在調用處被重寫了一遍一樣。很顯然這樣增加了體積,但速度提高了,就是用空間換時間

注意:調用內聯函數前必須有內聯函數的定義,不能只出現聲明。


函數重載:

只要參數表不同即可。返回值不同,參數表相同不叫重載,叫重定義。注意:編譯導致二義性會報錯。


全局變量和局部變量:

全局變量:在程序載入內存時就已經分配好了存儲空間,運行期間地址不變。初始化爲0。

局部變量:初始化爲隨機值。其定義在函數內,存儲空間是動態分配在棧中的,因爲函數每次被調用時局部變量被保存的地址不一樣,其自動初始化的工作不是一次性的,這會帶來無謂的開銷。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章