Base *base=static_cast(base);
Child * child=static_cast (child)
double b = static_cast(int a);
該運(yùn)算符用來修改對(duì)象的const屬性
不能直接對(duì)非指針和非引用的變量使用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)換為常量指針
將[問題檢測(cè)]和[問題處理]相分離
由[問題檢測(cè)代碼]可以拋出(throw)一個(gè)對(duì)象給[問題處理代碼],通過這個(gè)對(duì)象的類型和內(nèi)容,實(shí)際上完成了兩個(gè)部分的通信,通信的內(nèi)容是“出現(xiàn)了什么錯(cuò)誤”。
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();//拋出自定義異常(匿名對(duì)象)
}
(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)造的所有對(duì)象,都會(huì)被自動(dòng)析構(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)如果一個(gè)函數(shù)拋出了它的異常接口聲明所不允許拋出的異常,unexcepted函數(shù)會(huì)被調(diào)用,該函數(shù)默認(rèn)行為調(diào)用terminate函數(shù)中斷程序。
(1)系統(tǒng)標(biāo)準(zhǔn)庫
(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; //錯(cuò)誤信息
};
②異常檢測(cè)
if (age<= 0 || age >150)
{
//拋出異常 越界
//throw out_of_range("年齡必須在0~150之間"); //標(biāo)準(zhǔn)庫中的越界異常
//throw length_error("長(zhǎng)度異常"); //標(biāo)準(zhǔn)庫中的長(zhǎng)度異常
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)庫中的長(zhǎng)度異常
{
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: 以外存磁盤文件為對(duì)象進(jìn)行輸入和輸出
![[Pasted image 20221017092011.png]]
(3)(字符)串I/O:對(duì)內(nèi)存中指定的空間進(jìn)行輸入和輸出,通常指定一個(gè)字符數(shù)組作為存儲(chǔ)空間
cin.get()
:讀取輸入的第一個(gè)字符cin.get(ch)
:等價(jià)于ch=cin.get()
讀取輸入的第一個(gè)字符cin.get(buf,1024)
:讀取輸入的長(zhǎng)度為1024的字符串到buf數(shù)組中;且不會(huì)把換行符拿走(遺留在緩沖區(qū)中)cin.getline()
:讀取輸入的一行字符,會(huì)把換行符拿走并且扔掉cin.ignore()
:忽略一個(gè)字符cin.ignore(2)
:忽略兩個(gè)字符cin.peek()
:將輸入的第一個(gè)字符查看一眼,再放回緩沖區(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個(gè)字節(jié)到當(dāng)前輸出流中。cout.width(20);
:輸出長(zhǎng)度為20,不足補(bǔ)空格cout.fill('* ');
//所有的空格處用* 填補(bǔ)cout.setf(ios::left);
:左對(duì)齊cout.unsetf(ios::dec);
:卸載十進(jìn)制cout.setf(ios::hex);
:十六進(jìn)制cout.setf(ios::showbase);
:強(qiáng)制輸出整數(shù)的基數(shù)cout.unsetf(ios::hex);
:卸載十六進(jìn)制cout.setf(ios::oct);
:八進(jìn)制#include
ofstream 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海外機(jī)房具備T級(jí)流量清洗系統(tǒng)配攻擊溯源,準(zhǔn)確流量調(diào)度確保服務(wù)器高可用性,企業(yè)級(jí)服務(wù)器適合批量采購,新人活動(dòng)首月15元起,快前往官網(wǎng)查看詳情吧
網(wǎng)頁標(biāo)題:【C++】9.類型轉(zhuǎn)換,c++異常處理,輸入輸出流-創(chuàng)新互聯(lián)
路徑分享:http://www.rwnh.cn/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)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來源: 創(chuàng)新互聯(lián)
猜你還喜歡下面的內(nèi)容