《c++经典课后习题整理.pdf》由会员分享,可在线阅读,更多相关《c++经典课后习题整理.pdf(12页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、设计一个C ar类,他的数据成员要能描述一辆汽车的品牌、型号、出厂年份和价格,成员函数包括提供合适的途径来访问数据成员,在 main()函数中定义类的对象并调用相应的成员函数#include#includeusing namespace std;class Car(private:siring Pingpai;string Xinghao;int Year;int Price;public:void set()coutshu ru xiang guan xin xiendl;coutMpingpai:M;cinPingpai;coutnxinghao:n;cinXinghao;coutchuc
2、hangnianfen:;cinYear;coutjiage:,;cinPrice;)void show()(coutpingpai:Pingpaiendl;coutHxinghao:nXinghaoendl;coutch uchangnianfe n:nY e arendl;coutHjiage:Priceendl;);int main()Car car;car.set();car.show();return 0;(2)设计一个学生类Student,拥有的数据成员是学号、姓名、电话号码、所属院系,成员函数包括访问和修改这些属性,在 m ain。中定义对象,并输出相关信息#include#in
3、clude using namespace std;class Student 学号、姓名、电话号码、所属院系,成员函数包括访问和修改这些属性(private:string xuehao;string name;string tel;string department;public:Student(string x,string n,string t,string d)(xuehao=x;name=n;tel=t;department=d;)void change(string x,string n,string t,string d)修改属性(xuehao=x;name=n;tel=t;de
4、partment=d;)void displayOcout,xuehao=,xuehaoendl;coutnname=nnam eendl;cout,tel=,telendl;coutdepartment=departmentendl;);int main()(string a,b,c,d;cina;cinb;cinc;cind;Student s(a,b,c,d);s.display();return 0;)(3)设计一个学生类,包含学生呢个姓名、成 绩(char*name;double score),设计一个友元函数,比较学生成绩的高低,并求出下一组学生:Stu(,zhangn),78,S
5、tu(,wangn,80),Stu(,li,65),Stu(nchenn,50)中的最高分和最低分#include#includeusing namespace std;class student(private:char*name;double score;public:student()student(char*na,double sc)(name=na;score=sc;)friend void order(student sJ););void order(student s)(student tmp;int i,j;for(j=0;j3;j+)for(i=0;i3j;i4-4-)if(
6、si.scoresi+l.score)tmp=si;si=si+l;si+l=tmp;)coutv”分数由高到低排列:”;for(i=0;i4;i+)coutsi.nameH ,si.scoreendl;coutvv”最高分:ns0.nam eu ns0.scoreendl;coutv最低分:Ms3.nam eu,s3.scoreendl;)int main()(student s41=student(nzhang,78),student(,wang,80),student(,li,92),student(chen,50);order(s);)(4)编写程序,定义机动车类Vehicle,包括的
7、数据成员有出厂日期和售价并定义成员函数可以设置这些数据成员,再定义print()然后定义car类,增加乘客数量,iruck类增加载重吨数.#include#includeusing namespace std;class Vehicle(private:int year,month,day;int price;public:Vehicle()(coutplease input date:cout,yearH,month,day,;,endl;cinyear;cinmonth;cinday;coutplease input price:,;cinprice;coutVehicleHendl;)v
8、irtual void print 1()(cout ndate:y e a r,n m o n th n d a y n,endl;coutprice:,priceendl;);class Car:public Vehicle(public:int amount;Car()coutplease input amount of passager:cinamount;cout,car,endl;)void print2()(print 1();cout,amount:,amountendl;);class Truck:public Vehicle(public:int ton;Truck()co
9、utplease input ton:;cinton;couttruckendl;)void print3()(print 1();coutton:Htonendl;);int main()(Vehicle VI;Vl.printlO;Car Cl;Cl.print2();Truck Tl;Tl.print3();return 0;)(7-4)完整定义字符串类string,使用动态分配内存机制实现字符串存储,定义构造函数,析构函数,重载运算符“实现两个字符串的赋值,连接等功能。#i ncl ude#includeusing namespace std;class String(public:S
10、tringO;String(char*t);String(String&t);-String。;String operator=(String t);String operator+(String t);String operator+=(String t);void Show()coutpendl;)private:char*p;);String:String()(p=new charl;*p=0;)String:String(char*t)(p=new charstrlen(t)+1 J;strcpy(p,t);)String:String(String&t)(p=new charstrl
11、en(t.p)+l;strcpy(p,t.p);)String String:operator+(String t)(char*pt;pt=new charstrlen(p)+strlen(t.p)+1 ;strcpy(pt,p);strcat(pt,t.p);String temp(pt);delete pt;return temp;String String:operator+=(String t)(char*i;i=new charstrlen(p)+l;strcpy(i,p);deleted p;p=new charstrlen(t.p)+strlen(p)+l;strcpy(p,i)
12、;strcat(p,t.p);return*this;)String:String()(delete p;)String String:operator=(String t)(if(this=&t)return*this;delete p;p=new charstrlen(t.p)+l;strcpy(p,t,p);return*this;)void main()(Stringsl(nhello!);String s2(Mwhen.);String s3;s3=s2+sl;s3+=s2;s2=sl;s3.Show();s2.Show();)(8-4)根据程序定义一个求3 个数之间最大值的函数模板
13、#include#includetemplateT max(T a,T b,T c)return(ab?a:b)c?(ab?a:b):c;)int main()(coutmax(11,29,22)endl;coutmax(3.14f,28.3f,6.70endl;coutmax(cb,a,)endl;return 0;maxo)(5)有一个学生类student,包括学生姓名、成绩,设计一个友元函数,输出成绩对应的等级:大于等于90:优;80-90:良;7079:中;60!69:及格;小于60:不及格。#incl ude#includeclass student(char name10;int
14、deg;public:student(char na,int d)(strcpy(name,na);deg=d;)friend void trans(student&s)(if(s.deg=90)couts.nam eH,s.d e g H U en d l;else if(s.deg=80)couts.nam e,s.d eg en d l;else if(s.deg=70)couts.nam eHn s.d eg 中=60)couts.nam eH,s.d e g n及格 endl;elsecouts.nam en s.d e g n v v 不及格vvendl;);void main()
15、(student st=student(“王华”,78),student(“李明”,92),student(“张伟”,62),student(“孙强”,88);coutv输出结果:vvendl;coutv姓名v”成绩 Nv”等级 Nvendl;fbr(int i=0;i4;i+)trans(sti);编写一个程序,设计一个Point类,包括学号、姓名和成绩等私有数据成员,不含任何成员函数,只将main。设置为该类的友元函数。#includeclass pointint no;char name10;int deg;public:friend void main(););void main()(
16、point p;coutvv”输入学号:cinp.no;coutvv姓名:”;cinp.name;coutvv成绩:”;cinp.deg;coutvv”输出结果 vvendl;coutvv”学生:vvp.namevvendl;cou t 学 号:p.noe ndl;cou t ”成 绩为:Hp.degendl;)创建一个学生类,包括学号和成绩,编程输入和显示学生信息,建立一个人类,包括姓名,性别,年龄,并作为学生的基类.#includeclass Person(char name 10;char sex;int age;public:void input()(coutvv”请输入姓名;cinn
17、ame;coutvv”请输入性别:cinsex;coutvv”请输入年龄:;cinage;void displayO(cout 姓名:name,性别:sex,年龄:ageendl;);class Student:public Person(char sno10;int score;public:void input()(Person:input();cout”请输入学号:cinsno;coutvv 请输入成绩:“;cinscore;void displayO(Person:display();coutvv学号;v v s n o v v”,成绩:vvscorevvendl;);void mai
18、n()(Student si;sl.input();si.displayO;)(8)按要求编程:某学校教授和讲师的月工资计算办法规定如下:教授每月固定工资为4000元。讲师每月工资与讲课学时数有关,计算方法是每学时50元,另加补助1000元。编程显示某个教员的月工资数目。#include class Teacher(public:virtual int Sal ary()=0;virtual void Print(int)=O;);class Professor:public Teacher|private:char name20;int lessons;public:Professor。(c
19、outvv”请输入姓名:”;cinname;字符串中不能有空格)int SalaryO(return 4000;)void Print(int money)(cout”职称:教授姓名:n n a m e H 薪水:,moneyendlendl;);class Lecturenpublic Teacher(private:char name20;int lessons;public:Lecture r()(coutvv”请输入姓名:cinname;coutvv”请输入课时:cinlessons;1int SalaryO(return(1000+lessons*50);)void Print(in
20、t money)(coutvv职称:讲师姓名:vvnamevv薪水:vmoneyendlvvendl;);void main()(int money=0;Professor t;money=t.SalaryO;t.Print(money);Lecturer 1;money=l.SalaryO;l.Print(money);)(9)1,给定一个in t型 数 n,编程实现按不同进制输出,包括十进制数、八进制数、十六进制数。要求使用纯虚函数print()。十 进 制 数(dec)十六进制数(h e x)八进制数(oct)#include#includeint main()(char ch16=6,
21、T,2,3,475;6,7,8,9;A,B,C,D,E,F,output20;int input,temp,n,i=0;coutvv”请输入你想要转换的十进制数:”;cininput;coutvv”请输入要转换的进制(2=n=0;i)coutoutputi;coutendl;return 0;)两个或两个以上的函数,具有相同的函数名,但是形参的个数或者类型不同,编译器根据实参和形参的类型及个数进行最佳匹配,自动确定调用哪个函数,这就是函数的重载。重写和重载,他们其实是实现类型多态(同一种方法,不同的对象会产生不同的结果)特性的基本技术之一.重写也叫做覆写,它存在与有继承关系的子类中,是在子类中重新定义父类具有相同方法签名的函数,使之有不同的实现.要理解重写和重载的本质区别,实现要理解什么叫做具有相同签名的方法.其实很简单,就是指相同的方法名,相同的参数列表(参数个数以及相同位置的参数类型相同)以及相同的函数返回值.重写的一个重要特征就是必须要求方法的签名相同.重写的基本特征:1 .是一种运行时多态,又称为动态联编,只有在运行时才知道调用的是哪个方法.2.存在于有继承关系的子类中,只有被v irtu a l和 a b s tr a c t标记的虚方法和抽象方法才能被直接重写.3.用关键字o v e rrid e 来标记.4.重写这个方法的类的父类中有一个与这个方法签名相同的方法.
限制150内