c++語言支援函數重載,c語言不支援函數重載。
用于解決名字比對問題。
防止頭檔案被重複引用。
需要注意括号的使用,例如
對于情況1和2,則const用來修飾指針所指向的變量,這種情況下不允許對内容進行更改:
但是有其他方法可以改變<code>*a</code>的值:
對于情況1和2,可以先不進行初始化。雖然指針指向的内容是常量,但是指針本身不是常量。
對于情況3,定義時必須同時初始化:
對于情況4,指針本身和指向的内容均為常量。
任何不修改成員資料的函數都應該聲明為const函數。 const聲明必須出現在函數的聲明和函數的實作裡,否則編譯器會把它看成一個不同的函數。
c++可以用const或者#define定義常量,但是前者比後者有更多的優點:
const常量有資料類型,而宏常量沒有資料類型。編譯器可以對前者進行類型安全檢查,而對後者隻能進行字元替換,沒有類型安全檢查,并且在字元替換中可能會産生意料不到的錯誤。
有些內建化的工具可以對const常量進行調試,但是不能對宏常量進行調試。在c++常量中隻使用常量而不适用宏常量,即const常量完全可以取代宏常量。
對于結構體,結構體的長度一定是最長的資料元素的整數倍。結構體對齊參數按預設的8位元組對齊。
空的類是會占用記憶體空間的,而且大小是1,原因是c++要求每個執行個體在記憶體中都有獨一無二的位址。
類内部的成員變量:
普通的變量:是要占用記憶體的,但是要注意對齊原則(這點和struct類型很相似)。
static修飾的靜态變量:不占用内容,原因是編譯器将其放在全局變量區。
類内部的成員函數:
普通函數:不占用記憶體。
虛函數:要占用4個位元組,用來指定虛函數的虛拟函數表的入口位址。是以一個類的虛函數所占用的位址是不變的,和虛函數的個數是沒有關系的
sizeof操作符的結果類型是size_t,它在頭檔案中的typedef為unsigned int類型。該類型保證能容納所建立的最大對象的位元組大小。
sizeof是運算符,strlen是函數。
sizeof可以用類型做參數,strlen隻能用char*做參數,且必須是以“\0”結尾的。sizeof還可以用函數做函數。
數組做sizeof的參數不退化,傳遞給strlen就退化為指針。
大部分編譯程式在編譯的時候就把sizeof計算過了,是類型或是變量的長度。這就是sizeof(x)可以用來定義數組維數的原因。
strlen的長度要在運作的時候才能計算出來,用來計算字元串的長度,而不是類型占記憶體的大小。
sizeof後如果是類型必須加括号,如果是變量名可以不加括号,因為sizeof是個操作符而不是個函數。
當使用了一個結構類型或變量時,sizeof傳回實際的大小。當使用一靜态的空間數組時,sizeof傳回全部資料的尺寸。sizeof操作符不能傳回被動态配置設定的數組或外部的數組的尺寸。
數組作為參數傳遞給函數時傳的是指針而不是數組,傳遞的是數組的首位址。
struct也可以有構造函數、析構函數,之間也可以繼承。唯一的不同是struct裡面預設的通路控制是public,class中預設的通路控制是private。
繼承方式
對派生類可見性
對派生類對象可見性
作為派生類對象時狀态
public
公有和保護
公有的可見
保持原狀态
protected
都不可見
保護
private
私有
static_cast 在編譯時使用類型資訊執行轉換,在轉換執行時進行必要的檢測,操作數相對是安全的。
const_cast 最普通的用途就是轉換掉對象的const屬性
reinterpret_cast 複制要轉換對象的比特位到目标(是為了映射到完全不同的類型,雙刃劍,謹慎使用)
dynamic_cast 運作時檢查,用于在繼承體系中進行安全的向下轉換(基類指針/引用到派生類指針/引用的轉換),如果源和目标類型沒有繼承關系,編譯器會報錯。必須在代碼裡判斷傳回值是否為null來确認轉換是否成功。是四個轉化中唯一的rtti操作符,提供運作時類型檢查。(當基類指針指向或引用派生類對象時,轉換成功;否則得到null)
<code>unsigned int i = 0; i -= 1; // i=65535=pow(2,8) - 1;</code>
文法與const一樣,但是volatile的意思是在編譯器認識的範圍外,這個資料可以被改變。(該變量可能會被意想不到地改變)
10的二進制補碼為-(2^8 - |-10|) = - 246 = 11110110;
10的三進制4位數補碼為3^4 - |-10|=71=2111;
函數體内static變量的作用範圍為該函數體,不同于auto變量,該變量的記憶體植被配置設定一次,是以其值在下次調用時扔維持上次的值。
在子產品内的static全局變量可以被子產品内所有函數通路,但不能被子產品外其他函數通路。
在子產品内的static函數隻可被子產品内的其他函數使用,這個函數的使用範圍被限制在聲明它的子產品内。
在類中的static成員變量屬于整個類所擁有,對類的所有對象隻有一份拷貝。
在類中的static成員函數屬于整個類所擁有,這個函數不接收this指針,因而隻能通路類的static成員變量。