C++第9次作业.doc
《C++第9次作业.doc》由会员分享,可在线阅读,更多相关《C++第9次作业.doc(7页珍藏版)》请在冰豆网上搜索。
实验九:
多态性
(一)
1、定义计数器Counter类,对其重载运算符+。
实验代码:
#include
classcounter
{
private:
intn;
public:
counter(){n=0;}
counter(inti){n=i;}
counteroperator+(counterc)
{
countertemp;
temp.n=n+c.n;
returntemp;
}
voiddisp()
{
cout<<"n="< }
};
voidmain()
{
counterc1(15),c2(10),c3;
c3=c1+c2;
c1.disp();
c2.disp();
c3.disp();
}
实验结果:
2、定义一个基类BaseClass,从它派生出类DerivedClass,BaseClass有成员函数fn1()、fn2(),DerivedClass也有成员函数fn1()、fn2(),在主程序中定义一个DerivedClass的对象,分别用DerivedClass的对象以及BaseClass和DerivedClass的指针来调用fn1()、fn2(),观察运行结果。
实验代码:
#include
classBaseClass
{
public:
voidfn1();
voidfn2();
};
voidBaseClass:
:
fn1()
{
cout<<"调用基类的函数fn1()"<}
voidBaseClass:
:
fn2()
{
cout<<"调用基类的函数fn2()"<}
classDerivedClass:
publicBaseClass
{
public:
voidfn1();
voidfn2();
};
voidDerivedClass:
:
fn1()
{cout<<"调用派生类的函数fn1()"<voidDerivedClass:
:
fn2()
{cout<<"调用派生类的函数fn2()"<voidmain()
{
DerivedClassaDerivedClass;
DerivedClass*pDerivedClass=&aDerivedClass;
BaseClass*pBaseClass=&aDerivedClass;
aDerivedClass.fn1();
aDerivedClass.fn2();
pBaseClass->fn1();
pBaseClass->fn2();
pDerivedClass->fn1();
pDerivedClass->fn2();
}
实验结果:
3、实现重载函数Double(x),返回值为输入参数的两倍;参数分别为整型、长整型、浮点型、双精度型,返回值类型与参数一样。
实验代码:
#include
usingnamespacestd;
intDouble(inta){return2.0*a;}
longintDouble(longinta){return2*a;}
floatDouble(floata){return2.0*a;}
doubleDouble(doublea){return2.00000*a;}
voidmain(){
intm;
cout<<"输入一个整型数:
";
cin>>m;
cout<<"它的两倍是"< longintp;
cout<<"输入一个长整型数:
";
cin>>p;
cout<<"它的两倍是"< floatr;
cout<<"输入一个浮点型数:
";
cin>>r;
cout<<"它的两倍是"< doublen;
cout<<"输入一个双精度数:
";
cin>>n;
cout<<"它的两倍是"<}
实验结果:
4、定义一个复数类,重载“+”;“-”;“*”,“/”运算符实现复数的四则运算。
实验代码:
#include
classcomplex
{
private:
doublereal;
doubleimag;
public:
complex()
{
real=imag=0;
}
complex(doublerpart,doubleipart)
{
real=rpart;
imag=ipart;
}
complexoperator+(constcomplex&com)
{
complextemp;
temp.real=real+com.real;
temp.imag=imag+com.imag;
returntemp;
}
complexoperator-(constcomplex&com)
{
complextemp;
temp.real=real-com.real;
temp.imag=imag-com.imag;
returntemp;
}
complexoperator*(constcomplex&com)
{
complextemp;
temp.real=real*com.real-imag*com.imag;
temp.imag=real*com.imag+imag*com.real;
returntemp;
}
complexoperator/(constcomplex&com)
{
complextemp;
temp.real=(real*com.real+imag*com.imag)/(com.real*com.real+com.imag*com.imag);
temp.imag=(imag*com.real-real*com.imag)/(com.real*com.real+com.imag*com.imag);
returntemp;
}
voiddisplay()
{
if(imag>=0)
cout<<"("< else
cout<<"("< }
};
intmain(void)
{
doublea,b,c,d;
cout<<"输入两个复数,即a,b,c,d的值:
";
cin>>a>>b>>c>>d;
complexn1(a,b),n2(c,d);
cout<<"两个复数值为:
";
cout<<"A=";
n1.display();
cout<<"B=";
n2.display();
cout<
cout<"< complexresult1;
result1=n1+n2;
n1.display();
cout<<"+";
n2.display();
cout<<"=";
result1.display();
cout<"< complexresult2;
result2=n1-n2;
n1.display();
cout<<"-";
n2.display();
cout<<"=";
result2.display();
cout<"< complexresult3;
result3=n1*n2;
n1.display();
cout<<"×";
n2.display();
cout<<"=";
result3.display();
cout<"<if(c==0&&d==0)
cout<<"不能进行运算,除数不能为0"< else
{
complexresult4;
result4=n1/n2;
n1.display();
cout<<"÷";
n2.display();
cout<<"=";
result4.display();
}
cout< return0;
}
实验结果: