程序设计实习MOOC/自增和自减运算符的重载
自增和自减运算符的重载
问题
编写CDemo类,使得下面程序可以正常运行
int main(){ CDemo d(5); cout ++自减--运算符有前置和后置之分,为了区分,后置运算符多一个参数int。前置运算符:作为一元运算符重载,可以重载为成员函数也可以重载为全局函数(返回值到底是不是引用?)。后置运算符:作为二元运算符重载,多写一个参数int,但是没有实际意义。可以重载为成员函数也可以重载为全局函数。返回值不是引用!不是引用!不是引用!
强调:后置运算符多一个参数int,返回值不是引用。
为了cout可以正常输出,重载类型强制转换运算符int作为成员函数。**类型强制转换运算符重载**
不能写返回值类型
实际上其返回值类型为类型强制转换运算符代表的类型
**运算符重载的注意事项**1. C++不允许定义新的运算符1. 重载后运算符的含义应该符合日常习惯1. 运算符重载不改变运算符的优先级1. 以下运算符不能够被重载:. .* :: ?: sizeof1. 以下运算符重载是必须声明为类的成员函数:() [] ->1. 流提取>>和流插入运算符只能重载为全局函数,第一个参数ostream对象必须为引用。## 完整代码
include
using namespace std;
class CDemo{
public:
CDemo(int num = 0):n(num){}
CDemo operator++(); //前置++,成员函数
CDemo operator++(int); //后置++,成员函数
friend CDemo operator--(CDemo&); //前置--,友元函数
friend CDemo operator--(CDemo&, int); //后置--,友元函数
operator int(){ //强制类型转换运算符重载
return n;
}
// friend ostream& operator>(istream& ci, CDemo& d);
private:
int n;
};
//前置++
CDemo CDemo::operator++(){
n++;
return this;
}
//后置++
CDemo CDemo::operator++(int){
CDemo temp(this);
n++;
return temp;
}
//前置--
CDemo operator--(CDemo& d){
d.n--;
return d;
}
//后置--
CDemo operator--(CDemo& d, int){
CDemo temp(d);
d.n--;
return temp;
}
//ostream& operator>(istream& ci, CDemo& d){
// ci >> d.n;
// return ci;
//}
int main(){
CDemo d(5);
cout << (d++) << ",";
cout << d << ",";
cout << (++d) << ",";
cout << d << endl;
cout << (d--) << ",";
cout << d << ",";
cout << (--d) << ",";
cout << d << endl;
return 0;
}
#c++、mooc#
版权声明
本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处。如若内容有涉嫌抄袭侵权/违法违规/事实不符,请点击 举报 进行投诉反馈!