定义一个复数类COMPLEX,它应该包含有加、减、赋值、输出、比较两个数的大小等操作,所有操作
均以友元形式实现。编一主函数检查其功能。
加,减,输出都会做了....
请问赋值(即用友元重载"="操作符)怎么做?,"="操作符是否一定要用成员函数重载?
还有"比较两个数大小"要把什么">","<","<="等等都重载吗?有没有比较一般化的做法?
6 个解决方案
#1
=是特殊一点,只能用成员函数重载。。。
其实你的这些问题,任一本C++的教科书上都讲有,还是翻一下书吧。
其实你的这些问题,任一本C++的教科书上都讲有,还是翻一下书吧。
#2
比较两个数的大小 怎样做?
#3
#include <iostream>
#include <stdlib.h>
using namespace std;
class p
{
public:
void comp();
p(int x,int y){X=x;Y=y;}
void print()
{ cout << X <<":" <<Y<<endl;}
private:
int X,Y;
};
void p::comp()
{
int Z;
if(X>Y)
Z=X;
X=Y;
Y=Z;
}
int main(int argc, char *argv[])
{
int x,y;
cin>>x>>y;
p p1(x,y);
p1.comp();
p1.print();
system("PAUSE");
return 0;
}
#include <stdlib.h>
using namespace std;
class p
{
public:
void comp();
p(int x,int y){X=x;Y=y;}
void print()
{ cout << X <<":" <<Y<<endl;}
private:
int X,Y;
};
void p::comp()
{
int Z;
if(X>Y)
Z=X;
X=Y;
Y=Z;
}
int main(int argc, char *argv[])
{
int x,y;
cin>>x>>y;
p p1(x,y);
p1.comp();
p1.print();
system("PAUSE");
return 0;
}
#4
其他我不多说,关于比较运算符:
数学意义上,复数不能比较大小,这个暂时不考虑,假设用它的模进行比较
为了效率,许多比较运算符都单独实现,不进行依赖
但完全可以只使用一个运算符实现所有其他运算符
一个可用的运算符是<。以下是简单的实现:
bool COMPLEX::operator < ( COMPLEX const& c) const
{ return sqrt(x*x+y*y) < sqrt(c.x*c.x+c.y*c.y); }
bool COMPLEX::operator >= ( COMPLEX const& c) const { return !(*this<c); }
bool COMPLEX::operator > ( COMPLEX const& c) const { return c<*this; }
bool COMPLEX::operator <= ( COMPLEX const& c) const { return !(c<*this); }
bool COMPLEX::operator == ( COMPLEX const& c) const { return !(c<*this || *this<c); }
数学意义上,复数不能比较大小,这个暂时不考虑,假设用它的模进行比较
为了效率,许多比较运算符都单独实现,不进行依赖
但完全可以只使用一个运算符实现所有其他运算符
一个可用的运算符是<。以下是简单的实现:
bool COMPLEX::operator < ( COMPLEX const& c) const
{ return sqrt(x*x+y*y) < sqrt(c.x*c.x+c.y*c.y); }
bool COMPLEX::operator >= ( COMPLEX const& c) const { return !(*this<c); }
bool COMPLEX::operator > ( COMPLEX const& c) const { return c<*this; }
bool COMPLEX::operator <= ( COMPLEX const& c) const { return !(c<*this); }
bool COMPLEX::operator == ( COMPLEX const& c) const { return !(c<*this || *this<c); }
#5
除了重载还能怎么办呢?
#6
不知道的去看看标准库的是怎么做的.:)
#1
=是特殊一点,只能用成员函数重载。。。
其实你的这些问题,任一本C++的教科书上都讲有,还是翻一下书吧。
其实你的这些问题,任一本C++的教科书上都讲有,还是翻一下书吧。
#2
比较两个数的大小 怎样做?
#3
#include <iostream>
#include <stdlib.h>
using namespace std;
class p
{
public:
void comp();
p(int x,int y){X=x;Y=y;}
void print()
{ cout << X <<":" <<Y<<endl;}
private:
int X,Y;
};
void p::comp()
{
int Z;
if(X>Y)
Z=X;
X=Y;
Y=Z;
}
int main(int argc, char *argv[])
{
int x,y;
cin>>x>>y;
p p1(x,y);
p1.comp();
p1.print();
system("PAUSE");
return 0;
}
#include <stdlib.h>
using namespace std;
class p
{
public:
void comp();
p(int x,int y){X=x;Y=y;}
void print()
{ cout << X <<":" <<Y<<endl;}
private:
int X,Y;
};
void p::comp()
{
int Z;
if(X>Y)
Z=X;
X=Y;
Y=Z;
}
int main(int argc, char *argv[])
{
int x,y;
cin>>x>>y;
p p1(x,y);
p1.comp();
p1.print();
system("PAUSE");
return 0;
}
#4
其他我不多说,关于比较运算符:
数学意义上,复数不能比较大小,这个暂时不考虑,假设用它的模进行比较
为了效率,许多比较运算符都单独实现,不进行依赖
但完全可以只使用一个运算符实现所有其他运算符
一个可用的运算符是<。以下是简单的实现:
bool COMPLEX::operator < ( COMPLEX const& c) const
{ return sqrt(x*x+y*y) < sqrt(c.x*c.x+c.y*c.y); }
bool COMPLEX::operator >= ( COMPLEX const& c) const { return !(*this<c); }
bool COMPLEX::operator > ( COMPLEX const& c) const { return c<*this; }
bool COMPLEX::operator <= ( COMPLEX const& c) const { return !(c<*this); }
bool COMPLEX::operator == ( COMPLEX const& c) const { return !(c<*this || *this<c); }
数学意义上,复数不能比较大小,这个暂时不考虑,假设用它的模进行比较
为了效率,许多比较运算符都单独实现,不进行依赖
但完全可以只使用一个运算符实现所有其他运算符
一个可用的运算符是<。以下是简单的实现:
bool COMPLEX::operator < ( COMPLEX const& c) const
{ return sqrt(x*x+y*y) < sqrt(c.x*c.x+c.y*c.y); }
bool COMPLEX::operator >= ( COMPLEX const& c) const { return !(*this<c); }
bool COMPLEX::operator > ( COMPLEX const& c) const { return c<*this; }
bool COMPLEX::operator <= ( COMPLEX const& c) const { return !(c<*this); }
bool COMPLEX::operator == ( COMPLEX const& c) const { return !(c<*this || *this<c); }
#5
除了重载还能怎么办呢?
#6
不知道的去看看标准库的是怎么做的.:)