编写CDemo类,使得下面程序能够正常运行ios
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; }
5,6,7,7 7,6,5,5
自增++
自减--
运算符有前置和后置之分,为了区分,后置运算符多一个参数int。
前置运算符:做为一元运算符重载,能够重载为成员函数也能够重载为全局函数(返回值究竟是不是引用?)。
后置运算符:做为二元运算符重载,多写一个参数int,可是没有实际意义。能够重载为成员函数也能够重载为全局函数。返回值不是引用!不是引用!不是引用!函数
强调:后置运算符多一个参数int,返回值不是引用。
为了cout
能够正常输出,重载类型强制转换运算符int做为成员函数。this
类型强制转换运算符重载spa
不能写返回值类型 实际上其返回值类型为类型强制转换运算符表明的类型
运算符重载的注意事项code
.
.*
::
?:
sizeof
()
[]
->
>>
和流插入<<
运算符只能重载为全局函数,第一个参数ostream
对象必须为引用。#include<iostream> 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<<(ostream& co, const CDemo& d); // friend istream& 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<<(ostream& co, const CDemo& d){ // co << d.n; // return co; //} //istream& 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; }