return0;
}
5.某销售公司有销售经理和销售员工,月工资的计算办法为:
销售激励的底薪为4000元,并将销售额的2/1000做提成,销售员工无底薪,只提取5/1000为工资。
编写程序:
(1)定义一个积累Employee,它包含三个数据成员number,name和salary,以及编号和姓名的构造函数。
(2)有Employee类派生Salesman类。
Salesman类包含两个新数据成员commrate和sales,还包括了用于输入销售额并计算销售员工工资的成员函数pay()和用于输出打印的print()。
(3)由Salesman派生Salemanager,Salesmmanage类包含新数据成员monthlypay,以及用于输入销售额并计算销售经理工资的成员函数pay()和用于输出的print()。
(4)编写main()函数中测试所设计的类结构。
解:
(1)classEmployee
{
public:
Employee(longnum,char*n)
{
number=num;
strcpy(name,n);
}
protected:
longnumber;
charname[20];
doublesalary;
};
(2)classSalesman:
publicEmployee
{
public:
Salesman(longnum,char*n,floatc=:
Employee(num,n)
{commrate=c;}
voidpay()
{
cout<<"êè"<";
cin>>sales;
salary=commrate*sales;
}
voidprint(){
cout<}
protected:
floatcommrate;
doublesales;
};
(3)
classSalesmanager:
publicSalesman
{
public:
Salesmanager(longnum,char*n,floatc=,doublem=4000):
Salesman(num,n,c){
monthlypay=m;}
voidpay(){
cout<<"êè"<cin>>sales;
salary=monthlypay+commrate*sales;
}
voidprint(){
cout<}
private:
doublemonthlypay;
};
(4)intmain()
{
Salesmans1(1234,"àèe");
Salesmanagers2(1357,"");
();
();
();
();
return0;
}
第十章
1.定义一个辅助类Complex,重载运算符+、-、*、/使之能用于复数的加减乘除运算。
运算符重载函数为Complex类的成员函数。
编写程序,分别求出两个复数之和、差、积、商。
解:
#include
usingnamespacestd;
classComplex
{
public:
Complex(doubler=,doublei={real=r;imag=i;}
Complexoperator+(Complex);
friendComplexoperator-(Complex,Complex);
Complexoperator*(Complex);
friendComplexoperator/(Complex,Complex);
voiddisplay();
private:
doublereal,imag;
};
ComplexComplex:
:
operator+(Complexc)
{
returnComplex(real+,imag+;
}
Complexoperator-(Complexc1,Complexc2)
{
returnComplexComplex:
:
operator*(Complexc)
{
returnComplex(real*+,imag*+real*;
}
Complexoperator/(Complexc1,Complexc2)
{
doubler,i;
r=*+*/*+*;
i=*return(r,i);
}
voidComplex:
:
display()
{
cout<<"("<}
intmain()
{
Complexc1,,c2,5),c3;
cout<<"c1=";();
cout<<"c2=";();
c3=c1+c2;
cout<<"c1+c2=";();
c3=c1-c2;
cout<<"c1-c2=";();
c3=c1*c2;
cout<<"c1*c2=";();
c3=c1/c2;
cout<<"c1/c2=";();
return0;
}
2.定义一个日期类Date,包括年,月,日等私有数据成员。
要求为所定义的Date类设计如下重载运算符函数:
Dateoperator+(intdays);返回一日起加天数days后得到的日期
Dateoperator-(intdays);返回一日起减天数days后得到的日期
Intoperator-(Date&b);返回两日期相差的天数
解:
#include
usingnamespacestd;
intday_tab[12]={31,28,31,30,31,30,31,31,30,31,30,31};
classDate
{
public:
Date(){}
Date(inty,intm,intd){year=y;mon=m;day=d;}
voidsetday(intd){day=d;}
voidsetmon(intm){mon=m;}
voidsetyear(inty){year=y;}
intgetday(){returnday;}
intgetmon(){returnmon;}
intgetyear(){returnyear;}
Dateoperator+(intdays)
{
staticDatedate;
intnumber=dton(*this);
number-=days;
date=ntod(number);
returndate;
}
Dateoperator-(intdays)
{
staticDatedate;
intnumber=dton(*this);
number-=days;
date=ntod(number);
returndate;
}
intoperator-(Date&b)
{
intdays=dton(*this)-dton(b)-1;
returndays;
}
voiddisp()
{cout<}
private:
intyear,mon,day;
intleap(int);
intdton(Date&);
Datentod(int);
};
intDate:
:
leap(intyear)
{
if(year%4==0&&year&100!
=0||year%400==0)
return1;
elsereturn0;
}
intDate:
:
dton(Date&d)
{
inty,m,days=0;
for(y=1;y<=;y++)
if(leap(y))
days+=366;
else
days+=365;
day_tab[1]=leap29:
28;
for(m=0;m<;m++)
days+=day_tab[m];
days+=;
returndays;
}
DateDate:
:
ntod(intn)
{
inty=1,m=1,d,rest=n,days_year;
while
(1)
{
days_year=leap(y)366:
365;
if(restbreak;
else
rest-=days_year;
y++;
}
y--;
day_tab[1]=leap(y)29:
28;
while
(1)
{
if(rest>day_tab[m-1])
rest-=day_tab[m-1];
else
break;
m++;
}
d=rest;
returnDate(y,m,d);
}
intmain()
{
Datenow(2011,12,22),Nationday(1949,10,1);
cout<<"now:
";();
cout<<"Nationday:
";();
cout<<"à2ììêy:
"<<(now-Nationday)<Dated1=now+365,d2=now-365;
cout<<"now+365:
";();
cout<<"now-365:
";();
return0;
}
3.编写一个程序尖酸正方体圆柱体的表面积和体积。
要求抽象出一个公共的基类Body,吧他当做抽象类,在该类中定义表面积和体积的纯虚函数。
抽象类中定义一个数据成员data,他可以作为求的半径,正方形的边长,或者圆柱体的地面半径。
在三个类中都有计算白面积和体积的函数的具体实现。
解:
#include
usingnamespacestd;
classBody
{
protected:
doubledata;
public:
Body(doubledata)
{
Body:
:
data=data;
}
virtualdoubles()=0;
virtualdoublev()=0;
};
classCube:
publicBody
{
public:
Cube(doubledata):
Body(data){};
doubles()
{returndata*data*6;
}
doublev()
{returndata*data*data;
}
};
classSphere:
publicBody
{
public:
Sphere(doubler):
Body(r){};
doubles()
{
returndata*data**4;
}
doublev()
{
return4*data*data*data/3;
}
};
classCylinder:
publicBody
{
doubleheight;
public:
Cylinder(doubler,doubleheight):
Body(r){Cylinder:
:
height=height;}
doubles()
{
return(2**data*data+2*data**height);
}
doublev()
{
returndata*data**height;
}
};
intmain()
{
Body*p;
Cubeobj1(