当前位置:文档之家› 面向对象程序设计课后答案(完整版)

面向对象程序设计课后答案(完整版)

第二章2-4#include <iostream>using namespace std;Add(int a,int b);int main(){int x,y,sum;cout<<"please input x and y:";cin>>x>>y;sum = add(x,y);cout <<x<<"+"<<y<<"="<<sum<<endl;}Add(int a,int b){return a+b;}2-5(1)this is a C++ program.(2)x=50.6 y=10 z=Ax=216.34 y=10 z=Ax=216.34 y=2 z=Ax=216.34 y=2 z=E(3)x y z500 1000 0500 1500 1500500 200 15002-6#include <iostream>using namespace std;int main(){int *p,*init;int countp=0;int countn=0;p = new int[20];init = p;for(int i=0;i<20;i++){cin>>*p;p++;}p = p-20;for( i=0;i<20;i++){if(*p>0) countp++;if(*p<0) countn++;cout<<*p<<" ";p++;}cout<<"正数有:"<<countp<<endl; cout<<"负数有:"<<countn<<endl;p = init;delete[] p;return 0;}2-7不做要求#include <iostream>//#include <string>using namespace std;void checkagescore(string name,int age) {if (name == "exit") throw name;if(age<0||age>50)throw age;int main(){string name;int age;for(int i=0 ;i<5 ;i++ ){cin.ignore ();getline(cin,name );cin>>age ;try{checkagescore(name,age);}catch( string){cout<<"exception :name is exit"<<endl;continue;}catch(int){cout<<"exception :age is not proper"<<endl;continue;}cout<<"name:"<<name<<" age :"<<age<<endl;}return 0;}第三章3-1(1)A (2)C (3)B (4)C (5)C(6)B (7)B (8)C (9)C3-7(1)main()函数中p1.age = 30;语句是错误的。

age 是类的私有成员(2)构造函数应当给常数据成员和引用成员初始化,将构造函数改为:A(int a1,int b1):a(a1),b(b1){}或A(int a1 ):a(a1),b(a){}再将main中的A a(1,2); 改为A a(1);(3)(1)在Test 类中添加语句:void print();void Print(){cout<<x<<"-"<<y<<"="<<x-y<<endl;}改为void Test::Print(){cout<<x<<"-"<<y<<"="<<x-y<<endl;}main函数中Init(38,15);改为:A.Init(38,15);Print();改为:A.Print();3-8(1)Constructing AConstructing BDestructing BDestructing A(2)double a,double bpoint & pp.x3-9class box{int len1,len2,len3;public:box(int l1,int l2,int l3){len1 = l1;len2 = l2; len3 = l3;} long volumn(){return len1*len2*len3;}};3-10class Test{int m1,m2;public:void Init(int a,int b){m1 = a;m2 = b;}void Pring(){cout<<m1<<" "<<m2<<endl;}};3-11略3-12}第四章4-6(1)D (2)D (3)D (4)D (5)B(6)D4-7(1)static int count = 0;这样初始化静态成员值是不对的将其改为static int count;在类外,main函数前加int Sample::count = 0;(2)#include <iostream>//#include <cstdlib>using namespace std;class Ctest{private:int x; const int y1;public:const int y2;Ctest(int i1,int i2):y1(i1),y2(i2){y1 =10;//y1 为常量不能赋值x = y1;}int readme() const;};int Ctest::readme ()const{int i;i = x;x++; //常函数内不能改变成员值return x;}int main(){Ctest c(2,8);int i = c.y2;c.y2 = i;//y2为常量,不能改值i = c.y1;//y1私有,类外不能访问return 0;}将出错语句全部注释4-8(1)题中印刷错误,将class C构造函数改为:C(){cout<<"constructor C:";}运行结果为:constructor Aconstructor Bconstructor C(2)40(3)3434-9#include<iostream.h>#include<stdio.h>class Date{int year;int month;int day;public:Date(int y,int m,int d){year=y;month=m;day=d;}void disp(){cout<<year<<" "<<month<<" "<<day<<endl;}friend int count_day(Date &d,int k);friend int l(int year);friend int h(Date &d1,Date &d2);};int count_day(Date &d,int k){static int day_tab[2][12]={{31,28,31,30,31,30,31,31,30,31,30,31},{31,29,31,30,31,30,31,31,30,31,30,31}};// 使用二维数组存放各月天数,第一行对应非闰年,第二行对应闰年int j,i,s;if(l(d.year))j=1;//闰年,取1else j=0;//非闰年,取0if(k)//K非0时{s=d.day;for(i=1;i<d.month;i++)//d.month为输入的月份s+=day_tab[j][i-1];}else//K为0时{s=day_tab[j][d.month]-d.day;for(i=d.month+1; i<=12; i++)s+=day_tab[j][i-1];}return s;//S为相差的天数}int l(int year){if(year%4==0&&year%100!=0||year%400==0) // 是闰年return 1;else // 不是闰年return 0;}int h(Date &d1,Date &d2){int days,day1,day2,y;if(d1.year<d2.year)//第一个日期年份小于第二个日期年份{days=count_day(d1,0);for(y=d1.year+1;y<d2.year;y++)if(l(y))//闰年days+=366L;else//非闰年days+=365L;days+=count_day(d2,1);}else if(d1.year==d2.year){day1=count_day(d1,1);day2=count_day(d2,1);days=day2-day1;}elsedays=-1;return days;}void main(){ int year1,year2,month1,month2,day1,day2;cout<<"输入日期1"<<endl;cin>>year1>>month1>>day1;cout<<"输入日期2"<<endl;cin>>year2>>month2>>day2;Date d1( year1, month1, day1),d2( year2, month2, day2);int ds=h(d1,d2);{cout<<"输出结果:"<<endl;}if(ds>=0){d1.disp(); printf("与");d2.disp(); printf("之间有%d天\n\n",ds);}else//第一个日期小于第二个日期cout<<"时间错误!"<<endl;}4-10#include<iostream.h>#include<string.h>class Student{int number;char name[20];public:Student(int i=0,char *s="\0") //构造学生对象{ number=i;strcpy(name,s);}void Print() //输出结果{ cout<<"Number:"<<number<<endl;cout<<"Name:"<<name<<endl;}friend bool greaterthan(Student &st1,Student &st2);};bool greaterthan(Student &st1,Student &st2){return st1.number>st2.number; //返回成员number的比较结果}int main(){Studentst[5]={Student(65,"Li"),Student(78,"Zhang"),Student(80,"wang"),Student(92,"zhao"), Student(50,"zhen")};int max = 0;int min = 0;for(int i=1;i<5;i++){ if(!greaterthan(st[max],st[i]))max = i;if(!greaterthan(st[i],st[min]))min = i;}cout<<"最大成绩:"<<endl;st[max].Print ();cout<<"最小成绩:"<<endl;st[min].Print ();return 0;}4-11#include <iostream>#include <string>using namespace std;class Book{char *name;char*author;int sale;public:Book(){ name = '\0';author = '\0';sale = -1;}Book(char* a ,char* b,int c){name = new char[strlen(a)+1];strcpy(name,a);author = new char[strlen(b)+1];strcpy(author,b);sale = c;}void print(){cout<<"autor "<<author<<endl;cout<<"name "<<name<<endl;cout<<"price "<<sale<<endl;}~Book(){if(!name ) delete[] name;if(!author)delete[] author;}};int main(){Book b1("c++","li ai hua",12);Book b2;return 0;}第五章5-8改错题答案不唯一(1) class DC {int x;public:DC(){x =100;}};(2)编译无错,但逻辑错误,可改为:class BC{protected:int x;public:BC(int i=0){x = i}};class DC:private BC{public:DC(int i):BC(i){}};(3)将DC构造函数改为:DC(int i):BC(i){y = 0;}5-9(1) base class(2) (10,5)(3,9-18,33)(13,19)(13,19-18,33)(13,19)5-10#include <iostream>using namespace std;class Shape{int x,y;public:Shape(int ix,int iy){x = ix; y = iy;}virtual void show(){cout<<"pos: "<<x<<' '<<y<<endl;}};class Circle :public Shape{int radius;public:Circle(int ix,int iy,int r):Shape(ix,iy),radius(r){}void show() {Shape::show ();cout<<"circle: "<<radius<<endl;}};class Rect :public Shape{int width,higth;public:Rect(int ix,int iy,int iw,int ih):Shape(ix,iy),width(iw),higth(ih){} void show() {Shape::show ();cout<<"width and higth: "<<width<<' '<<higth<<endl;} };int main(){Shape s1(1,1);Rect r1(2,2,8,8);Circle c1(3,3,9);r1.show ();c1.show();return 0;}5-11#include<iostream.h>class vehicle // 定义汽车类{protected:int date; // 年份float price; //价格public:vehicle(int date,float price);int get_date();float get_price();float date_load();void show();};class car:public vehicle // 定义小车类{int passenger_load; // 载人数public:car(int date,float price,int passengers=4);int get_passengers();void show();};class truck:public vehicle // 定义卡车类{float payload; // 载重量public:truck(int date,float price,float max_load=24000.00); float efficiency();void show();};vehicle::vehicle(int date,float price){vehicle::date=date;vehicle::price=price;}int vehicle::get_date(){return date;}float vehicle::get_price(){return price;}void vehicle::show(){cout << "年份:" << date << "年" << endl;cout << "价格:" << price << "元" << endl;}car::car(int date, float price,int passengers) :vehicle (date, price){passenger_load=passengers;}int car::get_passengers (){return passenger_load;}void car::show(){cout <<" 车型:小车" << endl;vehicle::show();cout << "载人:" << passenger_load << "人" << endl;cout << endl;}truck:: truck(int date, float price,float max_load):vehicle(date,price) {payload=max_load;}float truck::efficiency(){return payload;}void truck::show(){cout <<"车型:卡车" << endl;vehicle:: show ();cout << "载重:" << efficiency() << endl;cout << endl;}void main (){car car1(2001,2000,5);truck tru1(2002,8000,340000);cout << "输出结果" << endl;car1. show ();tru1. show ();}第六章6-4d=3D::fun();6-5C::print(),cinfo=2C::print(),cinfo=2D::print(),dinfo=4B类不能定义对象,否则编译通不过,因为B未定义基类A中的虚函数print(),它也是个虚基类。

相关主题