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++的知識點,下面幾篇文章鏈接:
如果你想看網絡編程方面,可以查看以下幾篇文章鏈接:
喜歡我的文章的話,就關注我吧!不要只收藏和轉發哦,每天至少兩篇編程知識給大家,都是本人多年的經驗總結!
閱讀更多 cpp軟件架構獅 的文章