练习题...有一点问题请教!

时间:2023-02-12 20:56:53
题目:
定义一个复数类COMPLEX,它应该包含有加、减、赋值、输出、比较两个数的大小等操作,所有操作
均以友元形式实现。编一主函数检查其功能。


加,减,输出都会做了....
请问赋值(即用友元重载"="操作符)怎么做?,"="操作符是否一定要用成员函数重载?

还有"比较两个数大小"要把什么">","<","<="等等都重载吗?有没有比较一般化的做法?

6 个解决方案

#1


=是特殊一点,只能用成员函数重载。。。
其实你的这些问题,任一本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;
}

#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);  }

#5


除了重载还能怎么办呢?

#6


不知道的去看看标准库的是怎么做的.:)

#1


=是特殊一点,只能用成员函数重载。。。
其实你的这些问题,任一本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;
}

#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);  }

#5


除了重载还能怎么办呢?

#6


不知道的去看看标准库的是怎么做的.:)