本文主要讲述加号运算符“+”,自增运算符“++”,流提取运算符运“>>”,流插入运算符"<<"的重载。
先给出Vector类:
class Vector
{
public:
Vector(double a = 0, double b = 0) {x = a, y = b;} //构造函数
Vector(const Vector& v){x = v.x, y = v.y;} //拷贝构造函数
Vector operator + (const Vector& v); //重载+
Vector operator ++ (); //重载前置自增运算符“++”
Vector operator ++ (int); //重载后置自增运算符“++”
friend istream& operator >> (istream& input, Vector& v); //重载“>>”
friend ostream& operator << (ostream& output, Vector& v); //重载“<<”
private:
double x;
double y;
};
1.重载加号
代码实现
Vector Vector::operator + (const Vector& v)
{
return Vector(x + v.x, y + v.y); //此处调用拷贝构造函数
};
“/”、“*”、“-”的重载类似。
2.重载自增运算符
自增运算符分为前置和后置两种。对于前置自增,重载函数返回自增后的对象,对于后置自增,重载函数返回自增前的对象。为了区分,C++规定,在对自增运算符进行重载时,若额外加上一个int型形参,就表明重载的是后置自增。
(1)前置自增
Vector Vector::operator ++ ()
{
++x;
++y;
return *this;
};
(2)后置自增
Vector Vector::operator ++ (int)
{
Vector temp(*this);
x++;
y++;
return temp;
};
“--”的重载类似。
3.“>>”和“<<”
前面的运算符均重载为类的成员函数,但是对于流插入和流提取运算符却不能如此,而是重载为类的友元函数。
“>>”重载
istream& operator >> (istream& input, Vector& v)
{
cout << "x: ";
input >> v.x;
cout << "y: ";
input >> v.y;
return input;
};
“<<”重载
ostream& operator << (ostream& output, Vector& v)
{
output << "Vector:" << "(" << v.x << "," << v.y << ")";
return output;
};
以下是完整的程序:
#include <iostream>
using namespace std;
class Vector
{
public:
Vector(double a = 0, double b = 0) {x = a, y = b;}
Vector(const Vector& v){x = v.x, y = v.y;}
Vector operator + (const Vector& v);
Vector operator ++ ();
Vector operator ++ (int);
friend istream& operator >> (istream& input, Vector& v);
friend ostream& operator << (ostream& output, Vector& v);
private:
double x;
double y;
};
Vector Vector::operator + (const Vector& v)
{
return Vector(x + v.x, y + v.y); //此处调用拷贝构造函数
};
Vector Vector::operator ++ ()
{
++x;
++y;
return *this;
};
Vector Vector::operator ++ (int)
{
Vector temp(*this);
x++;
y++;
return temp;
};
istream& operator >> (istream& input, Vector& v)
{
cout << "x: ";
input >> v.x;
cout << "y: ";
input >> v.y;
return input;
};
ostream& operator << (ostream& output, Vector& v)
{
output << "Vector:" << "(" << v.x << "," << v.y << ")";
return output;
};
int main()
{
Vector v1, v2;
cin >> v1 >> v2;
v1++;
++v2;
cout << v1 << endl << v2 << endl;
return 0;
}
运行: