c3.display(); }
14.分别用成员函数和友元函数重载运算符,使对实型的运算符“*” 适用于复数运算。提示:两复数相乘的计算公式为:(a+bi)*(c+di)=(ac-bd)+(ad+bc)i。 #include
double real; double imag; public:
complex(double r=0.0,double i=0.0){ real=r; imag=i ;}
friend complex operator *(complex c1,complex c2); void display(); };
complex operator * (complex c1,complex c2) {return
complex(c1.real*c2.real-c1.imag*c2.imag,c1.real*c2.imag+c2.real*c1.imag );}
void complex::display() {
cout<<\}
void main()
{complex c1(5,4),c2(2,10),c3,;
cout<<\
c1.display();
cout<<\
c2.display();
c3=c1*c2;
cout<<\
c3.display(); }
15.分别用成员函数和友元函数重载运算符,使对实型的运算符“/” 适用于复数运算。 提示:两复数相除的计算公式为:(a+bi)/(c+di)=(ac+bd)/(c*c+d*d)+(bc-ad) /(c*c+d*d)i。
#include
【第 31 页 共 48 页】
{private:
double real; double imag; public:
complex(double r=0.0,double i=0.0){ real=r; imag=i ;}
friend complex operator /(complex c1,complex c2); void display(); };
complex operator / (complex c1,complex c2) {return
complex( (c1.real*c2.real+c1.imag*c2.imag)/(c2.real*c2.real+c2.imag*c2.imag), (c2.real*c1.imag-c1.real*c2.imag)/(c2.real*c2.real+c2.imag*c2.imag));}
void complex::display() {
cout<<\}
void main()
{complex c1(5,4),c2(2,10),c3,;
cout<<\
c1.display();
cout<<\
c2.display();
c3=c1/c2;
cout<<\
c3.display(); }
16.定义一个国家基类Country,包含国名、首都、人口等属性,派生出省类Province,增加省会城市、人口数量属性。 #include
Country(string nam,string c,long int cp) {name=nam;capital=c;country_population=cp;}
【第 32 页 共 48 页】
protected: string name; string capital;
long int country_population; };
class Province:public Country {public:
Province(string nam,string c,long int cp,string pc,long int pp):Country(nam,c,cp)
{Province_capital=pc; Province_population=pp; };
void show()
{cout<<\
cout<<\
cout<<\ cout<<\
cout<<\ }
private:
string Province_capital;
long int Province_population; };
int main()
{Province prov1(\prov1.show(); return 0; }
17.定义一个车基类Vehicle,含私有成员speed,weight。派生出自行车类Bicycle,增加high成员;汽车类Car,增加seatnum(座位数)成员。从bicycle和car中派生出摩托车类Motocycle。
#include
Vehicle(float sp,float w){speed=sp;weight=w;}
void display(){cout<<\private:
float speed; float weight; };
class Bicycle:virtual public Vehicle {public:
Bicycle(float sp,float w,float h):Vehicle(sp,w){high = h;} float high;
【第 33 页 共 48 页】
};
class Car:virtual public Vehicle {public:
Car(float sp,float w,int num):Vehicle(sp,w) {seatnum = num; }
protected: int seatnum; };
class Motorcycle:public Bicycle,public Car {public:
Motorcycle(float sp,float w,float h,int
num):Vehicle(sp,w),Bicycle(sp,w,h),Car(sp,w,num){}
void display(){
Vehicle::display();
cout<<\ } };
int main()
{Motorcycle m(120,120,120,1); m.display(); return 0; }
18.把定义平面直角坐标系上的一个点的类Cpoint作为基类,派生出描述一条直线的类Cline,再派生出一个矩形类Crect。要求成员函数能求出两点间的距离、矩形的周长和面积。设计一个完整程序。数据自拟。 #include
class Cpoint{ public:
void setX(float x){X=x;} void setY(float y){Y=y;} float getX(){return X;} float getY(){return Y;} protected:
float X,Y; };
class Cline:public Cpoint{ protected:
float d,X1,Y1; public:
【第 34 页 共 48 页】
void input(){
cout <<\请输入一个点的坐标值X1,Y1:\ cin>>X1>>Y1; }
float getX1(){return X1;} float getY1(){return Y1;} float dis(){
d=sqrt((X-X1)*(X-X1)+(Y-Y1)*(Y-Y1)); return d; }
void show(){
cout <<\直线长度为: \ } };
class Crect:public Cline{ public:
void input1(){
cout <<\请输入矩形另外一条边的长度d1:\ cin>>d1; }
float getd1(){return d1;} float getd(){ return d;} float area(){ a = d*d1; return a; }
float zhou(){ z=2*(d+d1); return z; }
void show1(){
cout <<\此矩形的面积和周长分别是 :\ }
protected:
float a, z,d1; };
int main(){ Cline l1; Crect r1; l1.setX(2); l1.setY(2); l1.input(); l1.dis(); l1.show();
【第 35 页 共 48 页】