一、符号重载
形式如:
class person {
public:
person() {};
person(int h) { a = h; }
person operator+(int num) {
person tem;
tem.a = a + num;
return tem;
};
int a;
};
int main(void) {
person p1(1);
person p2 = p1+10;//相当于p2=p1.operator+(10);
cout << p2.a << endl;
return 0;
}
由于其本质为函数调用,因此p1和整数位置无法调换,既图中所示p2 = p1+10不能写成p2 =10+p1;
函数可以重载,如
class person {
public:
person() {};
person(int h) { a = h; }
person operator+(int num) {
person tem;
tem.a = a + num;
return tem;
};
//函数重载
person operator+(person p2) {
person tem;
tem.a = a + p2.a;
return tem;
}
int a;
};
内置类型无法进行符号重载
案列:cout重载
class person{
public:
person(){
m_a=0;
m_b=0;
}
person(int a,int b){
m_a=a;
m_b=b;
}
int m_a;
int m_b;
}
ostream& operator(ostram& cout,person& p){
cout<<"p.a为"p.a<<"p.b为"<<p.b;
return cout;//实现链式输出
}
int main(void){
person p;
cout<<p<<endl;
return 0;
}
对于全局函数的符号重载,比如上述重载,相当于将<<左边当作第一个参数,<<当作第二个参数传如重载函数;
对于重载函数,由于不需要改变传入参数的值,所以全部采用引用传递;
指针重载
class person{
public:
person(){m_Age=0;}
person(int age)
{
int m_Age=age;
}
boid showage(){
cout<<"年龄为"<<this->age<<endl;
}
~person(){
cout<<"函数的析构调用"<<endl;
}
int m_Age;
}
class SmartPonit{
public:
person(){}
person(person*p){
m_Person=p;
}
person* operator->(){
return this->m_Person
}
private:
person *m_Person;
}
int mian(void){
SmartPoint sp=SmartPoint(new person(50));
sp->showage();
return 0;}