C++ Tutorial/Operator Overloading/overload operator with friend — различия между версиями
Admin (обсуждение | вклад) м (1 версия: Импорт контента...) |
(нет различий)
|
Текущая версия на 13:30, 25 мая 2010
+ is overloaded using friend function
<source lang="cpp">#include <iostream> using namespace std; class Point {
int x, y;
public:
Point() {} // needed to construct temporaries Point(int px, int py) { x = px; y = py; } void show() { cout << x << " "; cout << y << "\n"; } friend Point operator+(Point op1, Point op2); // now a friend Point operator-(Point op2); Point operator=(Point op2); Point operator++();
}; // Now, + is overloaded using friend function. Point operator+(Point op1, Point op2) {
Point temp; temp.x = op1.x + op2.x; temp.y = op1.y + op2.y; return temp;
} // Overload - for Point. Point Point::operator-(Point op2) {
Point temp; // notice order of operands temp.x = x - op2.x; temp.y = y - op2.y; return temp;
} // Overload assignment for Point. Point Point::operator=(Point op2) {
x = op2.x; y = op2.y; return *this; // i.e., return object that generated call
} // Overload ++ for Point. Point Point::operator++() {
x++; y++; return *this;
} int main() {
Point ob1(10, 20), ob2( 5, 30); ob1 = ob1 + ob2; ob1.show(); return 0;
}</source>
15 50
Make op-- a friend; use reference
<source lang="cpp">#include <iostream> using namespace std; class Point {
int x, y;
public:
Point() {} Point(int px, int py) { x = px; y = py; } void show() { cout << x << " "; cout << y << "\n"; } Point operator=(Point op2); friend Point operator++(Point &op); friend Point operator--(Point &op);
}; // Overload assignment for Point. Point Point::operator=(Point op2) {
x = op2.x; y = op2.y; return *this; // i.e., return object that generated call
} // Now a friend; use a reference parameter. Point operator++(Point &op) {
op.x++; op.y++; return op;
} // Make op-- a friend; use reference. Point operator--(Point &op) {
op.x--; op.y--; return op;
} int main() {
Point ob1(10, 20), ob2; ob1.show(); ++ob1; ob1.show(); // displays 11 21 ob2 = ++ob1; ob2.show(); // displays 12 22 --ob2; ob2.show(); // displays 11 21 return 0;
}</source>
10 20 11 21 12 22 11 21