实现复数的现实输出及其运算;
一,用成员运算符重载函数实现复数相加
首先:我们先理理思路,要用成员运算符,对复数进行运算得对其相应的运算符进行重载,对运算符重载的一般格式如下:
函数类型 operator 运算符名称(形参表)
{对运算符的重载处理}
例如
我们想对"+"用于Y类的复数的加法运算,函数原型是这样的:
Y operator +(Y &c1,Y &c2);
分析完,请大家坐好扶稳,那我们就立马开始上机操作:
#include<iostream>
using namespace std;
class Y //声明一个Y类
{public: //定义公有成员
Y(){uio=0;dfg=0;} //声明一个无参数的构造函数Y
Y(double u,double d):uio(u),dfg(d){} //定义一个带参数的构造函数,并用参数初始化表对数
//据成员进行初始化
Y operator +(Y &c2); //声明重载运算符"+"的函数
void qwe(); //定义一个成员函数
private:
double uio; //定义名为uio的私有数据成员
double dfg; //定义名为dfg的私有数据成员
};
Y Y::operator+(Y &c2) //对重载运算符"+"的函数进行定义
{
Y c; //建立一个临时Y类的对象c
c.uio=uio+c2.uio; //实现对两个复数的实部相加
c.dfg=dfg+c2.dfg; //实现对两个复数的虚部相加
return(c); //返回c的值
}
void Y::qwe() //对函数qwe进行类外定义
{
cout<<uio; //输出数据"uio"
if(dfg>0) //对dfg进行判断
cout<<"+"<<dfg<<"i"<<endl; //输出dfg的值
}
int main()
{Y c1(1,2),c2(4,5),c3; //声明Y类的对象c1,c2,c3,并对c1,c2传值
c3=c1+c2; //将运算符"+"用于复数的计算
c3.qwe(); //调用对象c3的成员函数qwe,输出c3的值
return 0;
}
到此程序就搞完了,大家都又帅又聪明应该都能看懂吧,
我在这里啰嗦一下,大家应该会有疑问,为啥我在写程序之前写的对运算符重载的一般格式为:
Y operator +(Y &c1,Y &c2);,而我在程序中写的却是这样 Y operator +(Y &c2);对比之后,大家应该发现后者比前者少了个参数,这是因为在main函数中的"c3=c1+c2"被C++编译器解释为了"c3=c1.operator+(c2)",从而表示以c2为实参调用c1的运算符重载函数"opreator+“对两复数进行相加。
有些同学可能在自己不看源程序的情况自己敲了一,从而下漏写了"Y(){uio=0;dfg=0;}”(在类中的第三行),哦豁,程序报错了,发生这个的原因是对象c3没有进行传值,所以就需要一个不含参数的构造函数,缺少了不含参数的构造函数程序就报错
不过问题不大,以后有我带大家长知识,因为我已经燃起来了。
二,用成员运算符重载函数实现复数自增
来大家先来审一下题,“实现复数自增"这不就是我们第一题的重载”+“改为重载”++"嘛,说着确实有点小简单,大家可以先去敲一下,(此处等待十分钟)那我们分析完成马上上机操作:
#include <iostream>
using namespace std;
class Y //声明一个Y类
{public:
Y(){sb=0;xb=0;} //声明一个无参数的构造函数Y
Y(double s,double x):sb(s),xb(x){} //定义一个带参数的构造函数,并用参数初始化表对数
//据成员进行初始化
Y operator++() //声明重载前置运算符"++"的函数对重载运算符"+"的函
//数进行定义
{ ++sb;
++xb;
return *this; //返回自加后的当前对象
}
void wer() //定义一个成员函数并对函数wer进行定义
{
cout<<sb;
if(xb>0)
cout<<"+"<<xb<<"i"<<endl;
if(xb<0)
cout<<xb<<"i"<<endl;
}
private:
double sb;
double xb;
};
int main()
{ Y c1(1,2); //定义Y类的c1对象
++c1; //让c1自加
c1.wer(); //调用对象c3的成员函数qwe,输出c3的值
return 0;
}
到这里呢,程序就写完了但我们的学习还没有结束噢,补充几个问题,请大家记好哟:
在重载单目运算符"++“”–"需要注意区分它们是前置运算符还是后置运算符,因为二者的作用是不相同的,并且它们的表达形式也不相同,我写了给大家对比区分一下,首先是前置自加运算符的表达形式: Y operator++(); 然后是后置自加运算符 **Y operator++(int);**大家可以对比了记一下,有同学可能会问后置的多了个int型的参数有什么用?它的作用只是为了与前置自增运算符有所区别,此外就啥作用。 当然我上面所写的程序是前置自增运算符,大家可以类比着去写一下后置自增运算符。
请大家注意前置自增运算符“++”和 后置自增运算符“++”作用的区别。前者是先自加返回的是修改后的对象本身。后者返回的是自加前的对象 然后对象自加。
今天的学习就到这吧,但我深知各位都缺钱:
那我就祝各位帅哥美女越来越有钱,我们下次再见。