重载运算符
c++语言定义了运算符作用于内置类型和复合类型的运算对象所执行的操作,当操作运算符作用于类类型的运算对象时,用户可以自行定义其含义。因为这种自定义的过程事实上市为了已存在的运算符赋予了另外一层含义,所以称之为重载运算符
IO库>>和<<运算符以及string对象,vector对象和迭代器使用的运算符都是重载的运算符.
左值和右值
c++只要左值和右值
在c++语言中,二者的区别没那么简单,一个左值表达式的求值结果是一个对象或者一个函数 ,归纳:当一个对象被用作右值的时候,用的是对象的值(内容);当对象被用作左值的时候,用的是对象的身份(内存中的位置)见课本p121页。
这一章内容比较基础见课本就好一直到p172页都是基础看看习题和练习就行。
c++语言中,异常处理包括:
throw表达式,异常检测部分使用throw表达式来表示它遇到了无法处理的问题。我们说throw引发了异常。
try语句块,异常处理部分使用了try语句处理异常,try语句以关键字try开始,并以一个或多个catch子句结束。try语句块中代码抛出的异常会被某个catch子句处理。因为catch子句“处理”异常
throw表达式
程序的异常检测部分使用throw表达式引发一个异常。throw表达式包含关键字throw和紧随期后的一个表达式,其中表达式的类型就是抛出的异常类型。throw表达式后面紧跟着一个分号,从而构成一条表达式语句。
例子:
Sales_item item1,item2;
cin>>item1>>item2;
if(item1.isbn()==item2.isbn())
{cout<<item1+item2<<endl;
return 0;
};
else
{
cerr<<"Data must refer to same ISBN"<<endl;
return -1;//
}
5.6.2 try语句块
try{
}catch()
{
}
catch()
{
}
try语句块的一开始是关键字try,紧跟着后面有一个块,这个块就像大多数时候的那样是花括号括起来的语句序列
编写处理代码
在之前的例子中,我们使用了一个throw表达式以避免两个代表不同书籍的Sales_item相加。我们假设执行Sale_items对象加法的代码,我们可以使用这个
while(cin>>item1>>item2)
try{
//执行添加两个Sales_item对象的代码
//如果添加失败,代码抛出一个runtime_error异常
}catch(runtime_error err)
{
cout<<err.what()<<"\nTry Again?Enter y or n"<<endl;
char c;
cin>>c;
if(!cin||c=='n')
break;
}
}
try语句块对应一个catch字句,该子句负责处理类型位runtime_error的异常
如果try语句块的代码