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,將常量指針被轉化成非常量指針
int* pp = _NULL_; //p本來是非常量
const int* npp = const_cast(pp); //加上const,將非常量指針轉換為常量指針
將[問題檢測]和[問題處理]相分離
由[問題檢測代碼]可以拋出(throw)一個對象給[問題處理代碼],通過這個對象的類型和內(nèi)容,實際上完成了兩個部分的通信,通信的內(nèi)容是“出現(xiàn)了什么錯誤”。
1. 語法:try{
.....//要試圖執(zhí)行的部分
}catch(捕獲類型){
//throw;向上拋出
......//異常處理
}//如果沒有任何處理異常的地方,那么成員調(diào)用Terminate函數(shù),終止程序
2. 異常嚴格類型匹配(1)在方法中
創(chuàng)新互聯(lián)公司主要從事網(wǎng)站制作、成都網(wǎng)站建設、網(wǎng)頁設計、企業(yè)做網(wǎng)站、公司建網(wǎng)站等業(yè)務。立足成都服務隴南,10年網(wǎng)站建設經(jīng)驗,價格優(yōu)惠、服務專業(yè),歡迎來電咨詢建站服務:18982081108void 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異常被拋出后,從進入try塊起,到異常被拋擲前,這期間在棧上構造的所有對象,都會被自動析構。析構的順序與構造的順序相反,這一過程稱為棧的解旋(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ù)默認行為調(diào)用terminate函數(shù)中斷程序。
(1)系統(tǒng)標準庫
(2)自己編寫異常類
class MyOutOfRange:public exception //繼承標準異常類
{
public:
MyOutOfRange(const string errorInfo) //有參構造string類型
{
this->m_Error = errorInfo;
}
MyOutOfRange(const char * errorInfo) //有參構造char *類型
{
this->m_Error = string( errorInfo);
}
virtual ~MyOutOfRange() //重載虛析構函數(shù)
{
}
virtual const char * what() const //重載what函數(shù)
{
return this->m_Error.c_str() ; //string轉char *的方法.c_str()
}
string m_Error; //錯誤信息
};
②異常檢測
if (age<= 0 || age >150)
{
//拋出異常 越界
//throw out_of_range("年齡必須在0~150之間"); //標準庫中的越界異常
//throw length_error("長度異常"); //標準庫中的長度異常
throw MyOutOfRange(("我的異常 年齡必須在0~150之間")); //自己編寫的異常
}
③異常處理
try
{
Person p(151); //這里年齡越界
}
catch ( out_of_range & e ) //標準庫中的越界異常
{
cout<< e.what()<< endl;
}
catch (length_error & e) //標準庫中的長度異常
{
cout<< e.what()<< endl;
}
catch (MyOutOfRange e) //自己編寫的異常
{
cout<< e.what()<< endl;
}
7.輸入輸出流
1.流的概念和流類庫的結構(1)標準I/O:標準設備的輸入和輸出
![[Pasted image 20221017091745.png]]
![[Pasted image 20221017091803.png]]
(2)文件I/O: 以外存磁盤文件為對象進行輸入和輸出
![[Pasted image 20221017092011.png]]
(3)(字符)串I/O:對內(nèi)存中指定的空間進行輸入和輸出,通常指定一個字符數(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()
:標志位,0為正常,1為異常:while(){
....
cin.clear();//重置標志位
cin.sync(); //清空緩沖區(qū)
cout<<"標志位是:"<
3.coutcout.flush()
:刷新緩沖區(qū),Linux下有效cout.put()
:向緩沖區(qū)寫字符cout.write()
:從buffer中寫num個字節(jié)到當前輸出流中。cout.width(20);
:輸出長度為20,不足補空格cout.fill('* ');
//所有的空格處用* 填補cout.setf(ios::left);
:左對齊cout.unsetf(ios::dec);
:卸載十進制cout.setf(ios::hex);
:十六進制cout.setf(ios::showbase);
:強制輸出整數(shù)的基數(shù)cout.unsetf(ios::hex);
:卸載十六進制cout.setf(ios::oct);
:八進制#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)定的海外服務器提供商?創(chuàng)新互聯(lián)www.cdcxhl.cn海外機房具備T級流量清洗系統(tǒng)配攻擊溯源,準確流量調(diào)度確保服務器高可用性,企業(yè)級服務器適合批量采購,新人活動首月15元起,快前往官網(wǎng)查看詳情吧