r1.setX(2); r1.setY(2); r1.input(); r1.input1(); r1.getd1(); r1.dis(); r1.area(); r1.zhou(); r1.show1();
return 0; }
19.声明一个哺乳动物Mammal类,再由此派生出狗Dog类,二者都定义Speak( )成员函数,基类中定义为虚函数。声明一个Dog类的对象,调用Speak()函数,观察运行结果。 #include
public:
Mammal():itsAge(1) { cout << \~Mammal() { cout << \
virtual void Speak() const { cout << \private: int itsAge; };
class Dog : public Mammal {
public:
Dog() { cout << \~Dog() { cout << \void Speak() const { cout << \};
int main() {
Mammal *pDog = new Dog; pDog->Speak(); delete pDog; return 0; }
20.定义一个抽象类Cshape,包含纯虚函数Area(用来计算面积)和SetData(用来重设形状大小)。然后派生出三角形Ctriangle类、矩形Crect类、圆Ccircle类,分别求其面积。最后定义一个CArea类,计算这几个形状的面积之和,各形状的数据通过Carea类构造函数或成员函数来设置。编写一个完整程序。
#include
【第 36 页 共 48 页】
using namespace std;
class Cshape {
public:
virtual float Area()=0; };
class CTriangle :public Cshape {
int vect; public:
CTriangle(int v):vect(v) {}
float Area() {return vect*1.732/4;} };
class CRect:public Cshape {
int length,height; public:
CRect(int l,int h):length(l),height(h) {} float Area() {return length*height;} };
class CCircle:public Cshape {
int radius; public:
CCircle(int r):radius(r) {}
float Area() {return 3.14*radius*radius;} };
class Area {
CTriangle t; CRect r; CCircle c; public:
Area(int v,int l,int h,int r):t(v),r(l,h),c(r) {} float sum() {return t.Area()+r.Area()+c.Area();} };
int main()
【第 37 页 共 48 页】
{
Area a(10,20,30,5); cout<
三、第三类题目[(10道,每题11分,请自行设计输出格式)
1.商店销售某一商品,商店每天公布统一的折扣(discount)。同时允许销售人员在销售时灵活掌握售价(price),在此基础上,对一次购10件以上者,还可以享受9.8折优惠。现已知当天3名销货员的销售情况为:
销货员号(num) 销货件数(quantity) 销售单价(price) 101 5 23.5 102 12 24.56 103 100 21.5
请编程序,计算出当日此商品的总销售款sum,以及每件商品的平均售价。要求用静态数据成员和静态成员函数。(提示:将折扣discount、总销售款sum和商品销售总件数n声明为静态数据成员,再定义静态成员函数average(求平均售价)和display(输出结果)。
#include
Product(int n,int q,float p):num(n),quantity(q),price(p){}; void total();
static float average(); static void display(); private: int num;
int quantity; float price;
static float discount; static float sum; static int n; };
void Product::total() {float rate=1.0;
if(quantity>10) rate=0.98*rate;
sum=sum+quantity*price*rate*(1-discount); n=n+quantity; }
void Product::display() {cout< cout< float Product::discount=0.05; float Product::sum=0; int Product::n=0; 【第 38 页 共 48 页】 int main() { Product Prod[3]={ Product(101,5,23.5),Product(102,12,24.56),Product(103,100,21.5)}; for(int i=0;i<3;i++) Prod[i].total(); Product::display(); return 0; } 2.请编写程序,处理一个复数与一个double数相加的运算,结果存放在一个double型的变量d1中,输出d1的值,再以复数形式输出此值。定义Complex(复数)类,在成员函数中包含重载类型转换运算符:operator double(){ return real;}。初值自拟。 #include Complex(){real=0;imag=0;} Complex(double r){real=r;imag=0;} Complex(double r,double i){real=r;imag=i;} operator double(){return real;} void display(); private: double real; double imag; }; void Complex::display() {cout<<\int main() {Complex c1(3,4),c2; double d1; d1=2.5+c1; cout<<\ c2=Complex(d1); cout<<\ c2.display(); return 0;} 3.定义一个Teacher(教师)类和一个Student(学生)类,二者有一部分数据成员是相同的,例如num(号码),name(姓名),sex(性别)。编写程序,将一个Student对象(学生)转换为Teacher(教师)类,只将以上3个相同的数据成员移植过去。可以设想为:一位学生大学毕业了,留校担任教师,他原有的部分数据对现在的教师身份来说仍然是有用的,应当保留并成为其教师的数据的一部分。 #include Student(int,char[],char,float); int get_num(){return num;} char * get_name(){return name;} 【第 39 页 共 48 页】 char get_sex(){return sex;} void display() {cout<<\;} private: int num; char name[20]; char sex; float score; }; Student::Student(int n,char nam[],char s,float so) {num=n; strcpy(name,nam); sex=s; score=so;} class Teacher {public: Teacher(){} Teacher(Student&); Teacher(int n,char nam[],char sex,float pay); void display(); private: int num; char name[20]; char sex; float pay; }; Teacher::Teacher(int n,char nam[],char s,float p) {num=n; strcpy(name,nam); sex=s; pay=p;} Teacher::Teacher(Student& stud) {num=stud.get_num(); strcpy(name,stud.get_name()); sex=stud.get_sex(); pay=1500;} void Teacher::display() {cout<<\int main() {Teacher teacher1(10001,\ Student student1(20010,\ cout<<\ student1.display(); teacher2=Teacher(student1); cout<<\ teacher2.display(); 【第 40 页 共 48 页】