运算符重载
#include<iostream>
using namespace std;
class Complex
{
Complex(int r = 0, int i = 0):real(r), image(i){};
friend ostream& operator << (ostream& output, Complex &p);
friend istream& operator >> (istream& input, Complex &p);
Complex operator + (Complex &, Complex &);
Complex operator - (Complex &, Complex &);
Complex operator * (Complex &, Complex &);
Complex operator / (Complex &, Complex &);
private:
int real;
int image;
};
ostream& operator << (ostream& output, Complex &p)
{
output<<"["<<p.real<<","<<p.image<<"]"<<endl;
return output;
}
istream& operator >> (istream& input, Complex &p)
{
input>>p.real>>p.image;
return input;
}
Complex Complex::operator +(Complex &p1, Complex &p2)
{
return Complex(p1.real + p2.real, p1.image + p2.image);
}
Complex Complex::operator - (Complex &p1, Complex &p2)
{
return Complex(p1.real - p2.real, p1.image - p2.image);
}
Complex Complex::operator * (Complex &p1, Complex &p2)
{
return Complex (p1.real * p2.real, p1.image * p2.image);
}
Complex Complex::operator / (Complex &p1, Complex &p2)
{
return Complex(p1.real/p2.real, p1.image/p2.image);
}
int main()
{
Complex a(10, 5), b(1, 5), c, d, e, f;
c = a + b;
d = a - b;
e = a * b;
f = a / b;
cout<<c<<endl;
cout<<d<<endl;
cout<<e<<endl;
cout<<f<<endl;
return 0;
}
这个用Visual C++ 6.0 编译出现了问题
[解决办法]
程序中的运算符+-*/的重载函数,其形参只能是一个对象;比如,+运算符重载函数,他的意思是this对象和形参对象相加,返回两个对象之和~
还有,你的程序中的p1.real,表示p1对象访问this对象的real,而不是p1对象访问p1对象的real;所以,这样的访问是非法的~你可以把real设置为protected,也可以再声明一个函数,其功能是返回私有变量real的值~
[解决办法]
上面的real的访问权限设置为public而不是protected~
sorry~
还有,构造函数前面也加上访问权限public吧~
[解决办法]
google一下《exception c++》里面的complex重载,那里有很详细的解释。
[解决办法]
Complex Complex::operator +(Complex &p1, Complex &p2)
{
return Complex(p1.real + p2.real, p1.image + p2.image);
}
Complex Complex::operator - (Complex &p1, Complex &p2)
{
return Complex(p1.real - p2.real, p1.image - p2.image);
}
Complex Complex::operator * (Complex &p1, Complex &p2)
{
return Complex (p1.real * p2.real, p1.image * p2.image);
}
Complex Complex::operator / (Complex &p1, Complex &p2)
{
return Complex(p1.real/p2.real, p1.image/p2.image);
}
不能作为成员函数了,要作为友元函数了
[解决办法]
把运算符也看成一个函数,+-这样的云算符a+b相当于调用a对象的+方法,传入参数为对象b所以形参一个就够了。
前面那个已经通过this指针“悄悄”地穿进去了
[解决办法]
// etmp.cpp : Defines the entry point for the console application.////编译器 vs2005#include "stdafx.h"#include<iostream>using namespace std;class Complex{public: Complex(int r = 0, int i = 0):real(r), image(i) {} friend ostream& operator << (ostream& output, Complex &p); friend istream& operator >> (istream& input, Complex &p); Complex& operator+ (Complex &); Complex& operator- (Complex &); Complex& operator* (Complex &); Complex& operator/ (Complex &);public: int real; int image;};Complex& Complex::operator +(Complex &p1){ return Complex(p1.real + this->real, p1.image + this->image);}Complex& Complex::operator - (Complex &p1){ return Complex(this->real - p1.real, this->image - p1.image);}Complex& Complex::operator * (Complex &p1){ return Complex (p1.real * this->real, p1.image * this->image);}Complex& Complex::operator / (Complex &p1){ return Complex(this->real/p1.real, this->image/p1.image);}ostream& operator << (ostream& output, Complex &p){ output<<"["<<p.real<<","<<p.image<<"]"<<endl; return output;}istream& operator >> (istream& input, Complex &p){ input>>p.real>>p.image; return input;}int _tmain(int argc, _TCHAR* argv[]){ Complex a(10, 5), b(1, 5), c, d, e, f; c = a + b; d = a - b; e = a * b; f = a / b; cout<<c<<endl; cout<<d<<endl; cout<<e<<endl; cout<<f<<endl; system("PAUSE"); return 0;}
[解决办法]