C++基礎知識點第九天

1.常量轉換:(const_cast<>)用來修改類型的 const 屬性。

1)常量指針、引用 被轉換成 非常量指針、引用,並且仍然指向原來的對象()互相轉換,將非常量轉換為常量。

例如u:

2)不能直接對非指針、非引用的變量直接使用 const_cast<> 操作符去移除它的 const 屬性。

2.重新解釋轉換或強勢類型轉換。reinterpret_cast<>(不安全的轉換,各種類型之間的強轉)

3.異常的處理(需要了解 C 的異常處理 和C++的處理)

C的異常處理的缺陷。和特點

4.C++的異常特點

1)異常不能被忽略,而且異常可以跨函數,異常並不是簡單的 int 型數字,最好有明確的意義。

2)C++提供的異常機制,具有跨函數和不可忽略的特點。

3)異常捕獲的嚴格類型匹配。

5.棧解旋:異常被拋出後,從進入 try 起,到異常處理完畢,這期間在棧上創建的所有對象都將會自動析構;析構的順序與創建的順序相反。

1)可以在函數前聲明拋出的異常類型,如果不聲明,表示可以拋出各種類型的異常。

例如: void func() throw(int , double, char){ }可以拋出三種類型的異常。

void func() throw(){ }不可以拋出任何類型的異常。

void func() { } 可以拋出任何類型的異常。

2)"但是:"

C++的異常規範在不同編譯器下可能執行效果會不同。(編譯器的不同會導致結果不同)

VS下會忽略C++的異常規範,但是會發出警告,程序照常執行; QT會報錯,終止程序運行。

通常情況下:如果一個函數拋出了它的異常接口聲明所不允許拋出的類型,unexcepted 函數將被調用,該函數默認調用 terminate 函數中斷程序。

1)異常也可以拋出一個類的對象。此時可以使用純虛函數做接口,聲明每種不同的異常對象(減少代碼量)。

例如: class BaseException{

public:

virtual void print_exception() = 0;

};

class TargetException : public BaseException{

public:

virtual void print_exception(){

cout<

}

};

class DestException : public BaseException{

public:

virtual void print_Exception(){

cout<

}

};

void CopyString(char *dest, const char *source){

if(dest == NULL){

throw TargetException();

}

if(source == NULL){

throw DestException();

}

memcpy(TargetException,DestException,strlen(source)+1 );

}

int main(){

const char *source = "nnakew";

char dest[1024] = {0};

try{

CopyString(dest, source);

}catch(BaseException& ex )

{

ex.print_exception();

}

return 0;

}

8.C++標準異常類:系統頭文件

9.創建自己的異常類:

引入系統頭文件,繼承系統的標準 出錯類;重載父類的 what 函數和虛析構函數。

10.標準輸入輸出操作

cin 是由緩衝區獲取文件到 目標內存或變量,若緩衝區沒有內容時,才需要從鍵盤上輸入

cout 是有緩衝區輸出文件到屏幕的,若緩衝區沒有滿時,或強制釋放,它是不會在屏幕上輸出內容的。

endl 的作用是刷新緩衝區,將內容輸出到屏幕或文件裡。

10.格式化輸入輸出操作

如果想查看之前的C++的知識點,下面幾篇文章鏈接:

如果你想看網絡編程方面,可以查看以下幾篇文章鏈接:

喜歡我的文章的話,就關注我吧!不要只收藏和轉發哦,每天至少兩篇編程知識給大家,都是本人多年的經驗總結!


分享到:


相關文章: