C++ try catch机制
1、在C++primer上面,看到try_catch 的机制,但是看得不是特别懂:
try
{
throw()
}
A
catch
{
}
请问A这个地方能够加入其他的代码吗
2、如果throw不在try块里面,如果直接throw会出现什么现象?会直接程序中断?throw能否单独出现
3、为什么要发明这样的机制
能否这样子:
(1)、发生错误的时候,就在错误管理器中注册一个错误,然后实时的显示出来
(2)、如果发生的错误对某段代码有致命影响,直接做一个判断跳过这个代码?
[解决办法]
一个一个来吧,A这里最好不要加代码!原因是:如果try里面没有出错,那么A这里的代码会执行,如果A这里的代码出了错,直接跳过A指向catch里面的代码。
throw这个问题是这样的,放在try里面,catch能捕获,不放在try里面,除非函数头throws,否则这个错没人处理,程序直接死。
为什么会出现这样的机制!最常见和最典型的就是ATM了,如果ATM取钱的时候出错,敢让ATM的程序中断吗?try是看程序有没有问题,如果没有,正常不受影响执行!try-catch就没有什么用!但是如果出了什么问题,可以让catch捕获这个异常,然后catch来调整,更改程序的执行!
try-catch语句其实可以这样理解:try是犯错(不一定会发错,但以防万一),catch是给你一个改正错误的机会!!
[解决办法]
1、A处不能加入代码。
2、throw如果不在try块里面,那么就会到上一级函数寻找try块。如果一直都找不到try块,就调用terminate()结束进程。throw能单独出现。
3、因为C++很多有函数无法用返回值的方式来报错。比如构造函数,比如STL的algorithm。还有就是异常能够让出错代码和错误处理代码分离。
4、异常不是C++特有的。Java,C#也都有。
[解决办法]
我写一个栈式的数组,用[code=C/C++][/code]抛出异常的方式判断栈空与栈满的, 楼主参考
#include <iostream>
using namespace std;
class IntArray{
public:
IntArray(size_t uSize):m_pArray(new int[m_uSize =uSize]),m_nTop(0){}
~IntArray(void){
if(m_nTop){
delete[] m_pArray;
m_pArray =NULL;
}
m_uSize =0;
m_nTop =0;
}
void Push(int nData){
if(m_nTop>=m_uSize)
throw OverFlow();
m_pArray[m_nTop++] = nData;
}
int Pop(void){
if(m_nTop<=0)
throw UnderFlow();
return m_pArray[--m_nTop];
}
void print(void){
for(int i=0;i<m_nTop;i++)
cout << m_pArray[i] << " ";
cout << endl;
}
private:
class OverFlow:public exception{
public:
const char* what(void)const throw(){
return "数组满";
}
};
class UnderFlow:public exception{
public:
const char* what(void)const throw(){
return "数组空";
}
};
int* m_pArray;
size_t m_uSize;
size_t m_nTop;
};
int main(void){
try{
IntArray arr(5);
arr.Push(10);
arr.Push(20);
arr.Push(30);
arr.Push(40);
arr.Push(50);
// arr.Push(60); 此时出现栈满异常
cout << arr.Pop() << endl;
cout << arr.Pop() << endl;
cout << arr.Pop() << endl;
cout << arr.Pop() << endl;
cout << arr.Pop() << endl;
//再取数的话,栈空了再取数出现异常
arr.print();
}
catch(exception& ex){
cout << ex.what() << endl;
}
return 0;
}
C++ try catch机制,该如何解决
C++ try catch机制1、在C++primer上面,看到try_catch 的机制,但是看得不是特别懂:try{throw()}Acatch{}请问
