C 入門相關基礎知識

2021-08-17 04:45:55 字數 1713 閱讀 6038

一、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 名字 空間除了 系統定義 的名字空間之外,還可以自定義,定義 名字空間...