一、c++的定義
c++是c語言的繼承,它既可以進行c語言的過程化程式設計,又可以進行以抽象資料型別為特點的基於物件的程式設計,還可以進行以繼承和多型性為特點的的物件導向的程式設計。c語言所支援的語法在c++中同樣也支援。
二、為什麼c++支援過載,而c語言不支援?
函式過載的定義:在同一作用域類,一組函式的函式名相同,引數列表不同(個數不同、型別不同),返回值可同可不同。
在vs編譯器下**的編譯到執行,是由系統直接編譯連線,直接生成執行結果。
程式的翻譯過程需要經過四個步驟:
1、預處理
(1)標頭檔案展開;
(2)巨集替換;
(3)去注釋;
(4)條件編譯。
2、編譯:將高階語言轉化為組合語言
3、彙編:將組合語言轉化為二進位制
4、連線:將所引用的資料連線進來
例如:以下的乙個函式宣告
void overloadfunc (int x, int d)
在c語言中,編譯器編譯後庫中的名字為_overloadfunc;
在c++中,編譯器編譯後庫中的名字為_overloadfunc_int_int;
又如同樣乙個函式宣告如下:
void overloadfunc (double x, int d)
在c語言中,編譯器編譯後庫中的名字為_overloadfunc;
在c++中,編譯器編譯後庫中的名字為_overloadfunc_double_int;
在連線時,系統都是在找名稱連線,如以上兩個函式:
在c語言中,函式名都相同會發生衝突;
在c++中,函式名不相同就不會發生衝突。
三、預設引數
1、全預設引數
例如:int add1(int a = 0, int b = 3){
return a + b;
2、半預設引數
例如:int add2(int a = 1, int b){
return a + b;
void test ()
add1(); //3
add1(1); //4
add1(1,1); //2
add2(2); //2
add2(2,2); //4
(注:半預設只能預設最右邊的並且是連續的)
四、命名空間
為了避免不同的人在庫檔案寫出相同變數或函式,引入了名字空間這個概念,通過使用namespace *** 來定義所使用的庫函式或變數,它相當於乙個更加靈活的檔案域(全域性域),可以用花括號把檔案的一部分括起來,並以關鍵字namespace開頭給它起乙個名字:
namespace name1
int a = 0;
namespace name2
int a = 1;
name1::a = 3;
name2::a = 4;
名字空間域解決全域性命名衝突的問題.
標準c++庫中的所有元件都是在乙個被稱為std的名字空間中宣告和定義的。在採用標準c++的平台上使用標準c++庫中的元件,只要寫乙個using指示符:using namespace std;就可以直接使用標準c++庫中的所有成員。
或者 std::成員 的方式也可以使用c++庫里的成員。
::是作用域解析符
namespace std // std是c++標準庫的名字空間
// 標準庫成員
C 相關基礎知識
1 記憶體空間分配 2 c 字元陣列 0 問題 從c繼承而來c風格字串 c style character string 它不是一種型別,而是為了表達和使用字串而形成的一種約定俗成的寫法。按此習慣書寫的字串存放再字元陣列中並以空字元結束 null terminated 以空字元結束的意思是再字串最後...
C 入門基礎知識
1.c 基本資料型別 整型int 字元型 char 浮點型 float double 邏輯性 bool 無型別 void 也稱內建型別 語言內部 已定義好的型別 非基本資料型別 陣列 type 指標 type 結構體 struct 聯合體 union 列舉 enum 類 class 這些即就是自定義...
c 入門基礎知識
名字空間 namespace,即名字空間,是指 識別符號的各種可見範圍。c 標準程式庫 中的所有識別符號都被定義於乙個名為std的namespace中。使用 using namespace 可以使得後面不需要每次指定名字空間。1 名字 空間除了 系統定義 的名字空間之外,還可以自定義,定義 名字空間...