C++实训(5)

1.复数类重载乘法
定义复数类 COMPLEX,实部、虚部为其私有数据成员,double;成员函数有:默认构造设置实部、虚部为(0,0);两参数构造函数设置实部、虚部为 x、y;set()函数设置实部、虚部为x、y;show()函数显示复数为x+yj 的形式(如 0+0j,0+1j);重载加法运算实现和另一个复数对象的加操作。成员函数均为公有。
编写主程序,(1)定义对象 a,初始化为(1,2);定义对象 b,初始化(3,4);定义对象 c,初始化为(0,0),依次显示三个对象。输入两个实数,重新设置 b 的实部虚部,令c=a+b,再显示a,b,c。

#include<iostream>
using namespace std;
class COMPLEX
{private:
double real,imag;
public:COMPLEX
{
real=0;imag=0;
}
COMPLEX(double r,double i)
{
real=r;imag=i;
}
void set(double r,double i)
{
real=r;imag=i;
}
void show()
{
if(imag>=0)
cout<<real<<'+'<<imag<<'j';
else
cout<<real<<'-'<<-imag<<'j';
}
COMPLEX operator+(COMPLEA &);  //声明运算符函数,重载+,只有一个参数
}
COMPLEX COMPLEA::OPERATOR+(COMPLEX &a);  //重载函数
{COMPLEX temp;
temp.real=this->real+a.real;
temp.imag=this->imag+a.imag;
return temp;
}
int main()
{
COMPLEX a(1,2),b(3,4),c;
double x,y;
a.show();cout<<endl;
b.show();cout<<endl;
c.show();cout<<endl;
 cin >> x >> y;
 b.set(x, y);
 c = a +b;
 a.show();
 cout<<endl;
 b.show();
 cout<<endl;
    c.show();
 cout<<endl;
 return 0;
}

2.形状类纯虚函数

定义 SHAPE 类,表示几何图形,x,y 位置坐标为其私有数据成员,double;成员函数有:默认构造设置位置坐标为(0,0);两参数构造函数设置 x,y;set()函数设置x,y 坐标;area()返回面积,纯虚函数(纯虚函数的类称为抽象类)。成员函数均为公有。
定义派生类——圆类 CIRCLE,继承上面的 SHAPE 类,增加数据成员 radius 表示半径,double,私有。成员函数有:默认构造函数,设置圆心半径均为 0;三参数构造函数初始化圆心和半径;set()设置圆心和半径;area()返回圆的面积,pai 取 3.14。
编写主程序,定义 CIRCLE 类对象c,初始化位置、半径为(3,4,5);定义 SHAPE 指针 p,定义SHAPE 类型的c 的引用sp2。p 指向派生类对象c,计算并显示面积;通过引用sp2 计算并显示面积。

#include<iostream>
#include<cmath>
using namespace std;
class SHAPE
{
double x,y;
public:SHAPE(int a,int b)
{x=a,y=b;}
SHAPE()
{x=0,y=0;}  //默认构造设置坐标为(0,0)
void set(int a,int b)
{x=a,y=b;}
virtual double area()=0;  //纯虚函数,面积为0
};
class CIRCLE:public SHAPE
{
double radius=0;   //增加数据成员radius 表示半径
public:
   CIRCLE()
   {  radius=0;
SHAPE::set(0,0);  
}   //默认构造函数,设置圆心和半径
CIRCLE(int a,int b,int r)  //三参数初始化圆心和半径 
{
radius=r;
SHAPE ::set(a,b);
}   
void set(int a,int b,int r)
{
SHAPE::set(a,b);
radius=r;
}
double area()
{
return 3.14*radius*radius;
}
int main()
{
CIRCLE C(3,4,5);
SHAPE *P;
SHAPE &SP2=C;
P=&C;
cout<<p->area()<<endl;
cout<<sp2.area()<<endl;
return 0;
}

猜你喜欢

转载自blog.csdn.net/Yangye_1018/article/details/107361482
今日推荐