《C 程式設計教程》 C 對C語言的擴充

2021-08-07 07:55:52 字數 3393 閱讀 8022

c++型別轉換符一共有四種:

static_cast(expression);

const_cast(expression);

dynamic_cast(expression);

reinterpret_cast(expression);

(1)static_cast<>:

最常用的型別轉換操作符,它主要執行非多型的轉換,用於代替c語言中通常的轉換操作。

(2)const_cast<>:

在進行型別轉換時用來修改型別的const或volatile屬性,除了const或volatile修飾之外,原來的資料值和資料型別都是不變的。

(3)dynamic_cast<>:

該操作符用於執行時檢查型別轉換是否安全,但只在多型型別時合法,即該型別至少具有乙個虛擬方法。

(4)einterpret_cast<>:

通常為運算元的位模式提供較低層的重新解釋。

(1)用string來定義字串

string s1; s1="hello c++";

string s2="hello c++";

string s3("hello c++");

string s4(6,'a');

(2)用來訪問字串中的字元

可以用是s[i]的形式來訪問操作字串中的字元。

(3)直接用「+」運算子將兩個string字串連線

cout

<(4)可以直接比較兩個string字串是否相等

if(s1.

(5)length()和size()函式

這兩個函式都用來獲取字串的長度,功能相同,類似於c語言中的strlen()函式

s.length();

s.size();

(6)swap()函式

用來交換兩個字串的值,其函式宣告如下:

void swap(string &s);
(1)引用的初始化

// 資料型別 &引用名 = 變數名;

int a=10;

int &b=a;

注意:

● 引用在定義時必須初始化,如int &b;語句是錯誤的。

● 引用在初始化時只能繫結左值,不能繫結常量值,如int &b=10;語句是錯誤的。

● 引用一旦初始化,其值就不能再更改,即不能再做別的變數的引用。

● 陣列不能定義引用,因為陣列是一組資料,無法定義其別名。

(2)引用作為函式引數

void swap(int& x, int& y)

int mian()

引用作為函式引數特點:

● 傳遞引用給函式與傳遞指標的效果是一樣的。這時,被調函式的形參就成為原來主調函式中的實參變數或物件的乙個別名來使用,所以在被調函式中對形參變數的操作就是對其相應的目標物件(在主調函式中)的操作。

● 使用引用傳遞函式的引數,在記憶體中並沒有產生實參的副本,它是直接對實參操作;而使用一般變數傳遞函式的引數,當發生函式呼叫時,需要給形參分配儲存單元,形參變數是實參變數的副本;如果傳遞的是物件,還將呼叫拷貝建構函式。因此,當引數傳遞的資料較大時,用引用比用一般變數傳遞引數的效率和所佔空間都好。

● 使用指標作為函式的引數雖然也能達到與使用引用的效果,但是,在被調函式中同樣要給形參分配儲存單元,且需要重複使用」*指標變數名」的形式進行運算,這很容易產生錯誤且程式的閱讀性較差;另一方面,在主調函式的呼叫點處,必須用變數的位址作為實參。而引用更容易使用,更清晰。

(3)引用於const限定符

const

int &a = 10; //常量值初始化const引用

const

int a = 10;

const ing &b = a; //const物件初始化const引用

用非const物件初始化const引用,只是不允許通過該引用修改變數值。除此之外,const引用甚至可以用不同型別的變數來初始化const引用,例如:

double d = 1.2;

const

int &b = d;

(1)new運算子

//new 資料型別(初始化列表)

//建立基本資料型別物件

char *pc = new

char; //申請一段空間來儲存char型別,記憶體沒有初始值

int *pi = new

int(10);//申請一段空間儲存int型別資料,初始值為10

double *pd = new

double();//申請一段空間儲存double型別資料,預設初始值為0

//建立陣列物件

//new 陣列型別[陣列長度]

int *pi = new

int[10]();

char *pc = new

char[10];

double *pd = new

double[0];

(2)delete 操作符

//delete 指標名;

//釋放陣列:delete 指標名;

delete pi;

delete pc;

在定義或宣告函式時給形參乙個初始值,在呼叫函式時,如果不傳遞實參就使用預設引數值。

注意:● 預設引數只可以在函式宣告中出現一次,如果沒有函式宣告,只有函式定義,才可以在函式定義中設定。

● 預設引數定義是自右向左,即如果乙個引數設定了預設引數,則其右邊不能再有普通引數。

● 預設引數呼叫時,遵循引數呼叫順序,即有引數傳入它會先從左向右依次匹配。

● 預設引數值可以是全域性變數,全域性常量,甚至可以是乙個函式,但不可以是區域性變數,因為預設引數的值是在編譯時確定的,而區域性變數位置與預設值在編譯時無法確定。

inline只是建議編譯器將函式嵌入到呼叫處,編譯器會根據函式的長度,複雜度等自行決定是否把函式作為內聯函式來呼叫。

所謂的過載(overload)函式就是在同乙個作用域內幾個函式名字相同但形參列表不同。

C 對C的擴充

int a int b a 宣告b是乙個整型變數a的引用變數 型別可以被 過載 霧 includeusing namespace std template 函式模板 t max t a,t b,t c int main 內建函式是在編譯時,將所呼叫函式的 嵌入到 主函式中。inline int ma...

1 3 C 對C的擴充

asm bool true false wchar t namespace using class public protected private friend this inline virtual throw try catch new delete explicit mutable expo...

C 中對C語言結構體用法的擴充

最近在學習c 了解到,c 中對c做了擴充,使用結構體時也可以像類一樣,規定私有資料型別和公有資料型別,同時也可以在struct中實現方法設定等等。但為了保持面對物件的特性,建議還是使用class來描述乙個類。案例如下 include lwww.cppcns.comt iostream include...