一元运算符重载
一元运算符通常出现在它们所操作的对象的左边,但有时它们也可以作为后缀。
重载自增运算符
Test& operator ++ () {
++a;
return *this;
}
Test operator ++ (int) {
Test ret(a);
a++;
return ret;
}
在前置++中,我们返回的是引用。而在后置++中,我们创建临时变量,返回操作前的值。参数列表中包含的 int 没有实际作用。
重载[]运算符
class Arr {
int a[256];
public:
int& operator[] (int i) {
return a[i%256];
}
};
int main() {
Arr a;
a[256]=1;
cout<<a[0];
}
二元运算符重载
最常见的应用场景就是加减乘除了。比如我们要实现向量的加法。通常我们在传参时,都会使用常量引用来提高效率并保证安全。
注意,类私有成员可以被类成员函数访问,不区分成员在哪个实例里。因此以下例子是合法的
class Point {
int x,y;
public:
Point(int x,int y): x(x),y(y) {};
Point operator + (const Point& b) {
return Point(x+b.x,y+b.y);
}
void print() {
cout<<x<<","<<y<<endl;
}
};
int main() {
Point a(1,1),b(2,3);
(a+b).print();
}
输入输出流运算符重载
输入输出的重载本是可以通过成员函数完成的,但这样无法将 cout 作为左操作数,为了符合习惯,我们使用友元函数来完成这个重载过程。
class Point {
int x,y;
public:
Point(int x,int y): x(x),y(y) {};
friend ostream& operator<<(ostream &os,const Point &p) {
os<<p.x<<","<<p.y;
return os;
}
};
int main() {
Point a(1,1);
cout<<a;
}
输入重载同理,不做赘述。
|
请发表评论