Base *base=static_cast(base); Child * child=static_cast (child)double b = static_cast(int a); 該運算符用來修改對象的const屬性
不能直接對非指針和非引用的變量使用const_cast操作符去直接移除它的const.const int* p = _NULL_; //p本來是常量指針
int* np = const_cast(p); //取出const,將常量指針被轉(zhuǎn)化成非常量指針 int* pp = _NULL_; //p本來是非常量
const int* npp = const_cast(pp); //加上const,將非常量指針轉(zhuǎn)換為常量指針 將[問題檢測]和[問題處理]相分離
由[問題檢測代碼]可以拋出(throw)一個對象給[問題處理代碼],通過這個對象的類型和內(nèi)容,實際上完成了兩個部分的通信,通信的內(nèi)容是“出現(xiàn)了什么錯誤”。1. 語法:try{
.....//要試圖執(zhí)行的部分
}catch(捕獲類型){
//throw;向上拋出
......//異常處理
}//如果沒有任何處理異常的地方,那么成員調(diào)用Terminate函數(shù),終止程序2. 異常嚴(yán)格類型匹配(1)在方法中

void TestFunction**(){**
cout **<<** "開始拋出異常..." **<<** endl**;**
//throw 10; //拋出int類型異常
//throw 'a'; //拋出char類型異常
//throw "abcd"; //拋出char*類型異常
//throw myException();//拋出自定義異常(匿名對象)
}(2)在main中
try{
TestFunction();
}
catch (int){
cout<< "拋出Int類型異常!"<< endl;
}
catch (char){
cout<< "拋出Char類型異常!"<< endl;
}
catch (char*){
cout<< "拋出Char*類型異常!"<< endl;
}
catch (string){
cout<< "拋出string類型異常!"<< endl;
}
catch(MyException e){//拋出自定義異常
e.printError();
}
//捕獲所有異常
catch (...){
cout<< "拋出其他類型異常!"<< endl;
}3. 棧解旋unwinding異常被拋出后,從進(jìn)入try塊起,到異常被拋擲前,這期間在棧上構(gòu)造的所有對象,都會被自動析構(gòu)。析構(gòu)的順序與構(gòu)造的順序相反,這一過程稱為棧的解旋(unwinding).
4. 異常接口聲明(1)只能拋出int類型異常:void func() throw(int){}
(2)能拋出類型A,B,C及其子類型的異常:void func() throw(A,B,C){}
(3)不拋任何類型異常:void func() throw(){}
(4)如果一個函數(shù)拋出了它的異常接口聲明所不允許拋出的異常,unexcepted函數(shù)會被調(diào)用,該函數(shù)默認(rèn)行為調(diào)用terminate函數(shù)中斷程序。
(1)系統(tǒng)標(biāo)準(zhǔn)庫![![[Pasted image 20221016134510.png]]](/upload/otherpic36/11748ae9228945c892f4653d37ea671f.jpg)
(2)自己編寫異常類
class MyOutOfRange:public exception //繼承標(biāo)準(zhǔn)異常類
{
public:
MyOutOfRange(const string errorInfo) //有參構(gòu)造string類型
{
this->m_Error = errorInfo;
}
MyOutOfRange(const char * errorInfo) //有參構(gòu)造char *類型
{
this->m_Error = string( errorInfo);
}
virtual ~MyOutOfRange() //重載虛析構(gòu)函數(shù)
{
}
virtual const char * what() const //重載what函數(shù)
{
return this->m_Error.c_str() ; //string轉(zhuǎn)char *的方法.c_str()
}
string m_Error; //錯誤信息
};②異常檢測
if (age<= 0 || age >150)
{
//拋出異常 越界
//throw out_of_range("年齡必須在0~150之間"); //標(biāo)準(zhǔn)庫中的越界異常
//throw length_error("長度異常"); //標(biāo)準(zhǔn)庫中的長度異常
throw MyOutOfRange(("我的異常 年齡必須在0~150之間")); //自己編寫的異常
}③異常處理
try
{
Person p(151); //這里年齡越界
}
catch ( out_of_range & e ) //標(biāo)準(zhǔn)庫中的越界異常
{
cout<< e.what()<< endl;
}
catch (length_error & e) //標(biāo)準(zhǔn)庫中的長度異常
{
cout<< e.what()<< endl;
}
catch (MyOutOfRange e) //自己編寫的異常
{
cout<< e.what()<< endl;
}7.輸入輸出流
1.流的概念和流類庫的結(jié)構(gòu)(1)標(biāo)準(zhǔn)I/O:標(biāo)準(zhǔn)設(shè)備的輸入和輸出
![[Pasted image 20221017091745.png]]
![[Pasted image 20221017091803.png]]
(2)文件I/O: 以外存磁盤文件為對象進(jìn)行輸入和輸出
![[Pasted image 20221017092011.png]]
(3)(字符)串I/O:對內(nèi)存中指定的空間進(jìn)行輸入和輸出,通常指定一個字符數(shù)組作為存儲空間
cin.get():讀取輸入的第一個字符cin.get(ch):等價于ch=cin.get()讀取輸入的第一個字符cin.get(buf,1024):讀取輸入的長度為1024的字符串到buf數(shù)組中;且不會把換行符拿走(遺留在緩沖區(qū)中)cin.getline():讀取輸入的一行字符,會把換行符拿走并且扔掉cin.ignore():忽略一個字符cin.ignore(2):忽略兩個字符cin.peek():將輸入的第一個字符查看一眼,再放回緩沖區(qū),可用于判斷cin.putback():將字符放回緩沖區(qū),可用于判斷cin.fail():標(biāo)志位,0為正常,1為異常:while(){
....
cin.clear();//重置標(biāo)志位
cin.sync(); //清空緩沖區(qū)
cout<<"標(biāo)志位是:"<3.coutcout.flush():刷新緩沖區(qū),Linux下有效cout.put():向緩沖區(qū)寫字符cout.write():從buffer中寫num個字節(jié)到當(dāng)前輸出流中。cout.width(20);:輸出長度為20,不足補空格cout.fill('* ');//所有的空格處用* 填補cout.setf(ios::left);:左對齊cout.unsetf(ios::dec);:卸載十進(jìn)制cout.setf(ios::hex);:十六進(jìn)制cout.setf(ios::showbase);:強制輸出整數(shù)的基數(shù)cout.unsetf(ios::hex);:卸載十六進(jìn)制cout.setf(ios::oct);:八進(jìn)制#includeofstream ofs;
ofs.open("./test.txt",ios:out | ios:trunc);
//ofs.is_open();判斷能否打開成功
ofs<<"write something here"<ifstream ifs;
ifs.open("./test.txt",ios:in);
//ifs.is_open();判斷能否打開成功
//第一種右移讀文件方式,推薦
char buf[1024];
while(ifs>>buf){
cout<
你是否還在尋找穩(wěn)定的海外服務(wù)器提供商?創(chuàng)新互聯(lián)www.cdcxhl.cn海外機房具備T級流量清洗系統(tǒng)配攻擊溯源,準(zhǔn)確流量調(diào)度確保服務(wù)器高可用性,企業(yè)級服務(wù)器適合批量采購,新人活動首月15元起,快前往官網(wǎng)查看詳情吧
網(wǎng)頁標(biāo)題:【C++】9.類型轉(zhuǎn)換,c++異常處理,輸入輸出流-創(chuàng)新互聯(lián)
路徑分享:http://www.chinadenli.net/article30/pdppo.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供網(wǎng)站內(nèi)鏈、商城網(wǎng)站、網(wǎng)站建設(shè)、做網(wǎng)站、服務(wù)器托管、搜索引擎優(yōu)化
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)
猜你還喜歡下面的內(nèi)容