c+课后习题答案_第1页
c+课后习题答案_第2页
c+课后习题答案_第3页
c+课后习题答案_第4页
c+课后习题答案_第5页
已阅读5页,还剩4页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、1、C+的特点:C+语言具有以下特点:(1) C+是C语言的超集。它既保持了C语言的简洁、高效和接近汇编语言等特点,又克服了C语言的缺点,其编译系统能检查更多的语法错误,因此,C+比C语言更安全。(2) C+保持了与C语言的兼容。绝大多数C语言程序可以不经修改直接在C+环境中运行,用C语言编写的众多库函数可以用于C+程序中。(3) 支持面向对象程序设计的特征。C+既支持面向过程的程序设计,又支持面向对象的程序设计。(4) C+程序在可重用性、可扩充性、可维护性和可靠性等方面都较C语言得到了提高,使其更适合开发大中型的系统软件和应用程序。C+对C那些发展?C主要有如下不足之处:1.编译器查错能力

2、弱2.没有支持代码重用的机制,编程效率低下3.结构上的不足,导致难以开发大型、复杂的程序4.因语法过于灵活,导致安全性下降C+克服了C的不足,C+支持面向对象的程序设计。C+中发展了类的概念,使面向对象的设计能以实现,适于开发大型、复杂的程序2. 一个c+程序由哪几部分构成?每一部分的作用是什么?任何的可被执行的程序都必须要有一个被执行的入口点,当然C+也不会例外,有main函数作为整个程序的入口点,而且必不可少。再有就是在main函数中所要用到的类,这个部分的内容由#include将类的内容在链接的过程中参与到整个程序的过程中,但是这个部分的内容并不参与编译。为了管理的清晰和系统化,类方法的

3、实现部分将会存在另外一个或者几个独立的文件中,当然如果不嫌弃有一个长长的文件的话,也可以将类的实现方法跟类放在同一个文件当中。总体上就分为这三个部分。4、 请说明编辑、编译、连接的作用编辑是应用程序开发的第一步,工作内容就是输入、修改程序。通过程序编辑而得到的程序称为源程序,约定的扩展名是cpp。编译是应用程序开发的第二步,工作内容就是分析程序文件中的源程序,生成目标程序,扩展名是obj。连接是应用程序开发的第三步,工作内容就是将若干目标程序加以归并、整理,为所有的函数、变量分配具体地址,生成可执行程序,扩展名是exe。编译后得到的目标文件为什么不能直接运行?编辑的过程就是产生源代码的过程,这

4、个部分的文件能很容易被人们理解和阅读,但是却不会被机器所读懂。编译的过程就是将被编辑的源文件生成机器所能读懂的语言的过程。链接就是在各个被编译的文件之间形成一个可以互通消息的同道。被编译过的源文件在没有链接之前是彼此孤立的,即不能够互相传达信息,所以被编译过后得到的目标文件仍然不能直接运行。构造函数和析构函数的作用是什么?什么时候需要自己定义构造函数和析构函数?构造函数用来处理对象的初始化,它的功能是有用户定义的,用户根据初始化的要求设计函数体和函数参数;当一个类含有一些数据成员,你需要在实例化类的时候就初始化这些成员,就需要自己定义构造函数 ;析构函数作用是用来完成对象被删除前的一些清理工作

5、,就是专门的扫尾工作;当你的类数据成员中使用了动态分配的内存,就需要定义自己的析构函数来释放这部分内存,防止内存泄露.输入一个字符串,把其中的字符按逆序输出。如输入LIGHT,输出THGIL。要求用string方法。#include #include using namespace std;int main() string str; int i,n; char temp; coutstr; n=str.size(); for(i=0;in/2;i+)temp=stri;stri=strn-i-1;strn-i-1=temp; coutstrendl; return 0; .有5个字符串,要求

6、将它们按由小到大的顺序排列,用string方法。#include #include using namespace std;int main() int i; string str5=BASIC,C,FORTRAN,C+,PASCAL; void sort(string ); sort(str); coutthe sorted strings :endl; for(i=0;i5;i+) coutstri ; coutendl; return 0;void sort(string s)int i,j; string t; for (j=0;j5;j+) for(i=0;isi+1) t=si;s

7、i=si+1;si+1=t; 二章1.#include using namespace std;class Time public: /成员改为公用的 int hour; int minute; int sec; ;Time t;void set_time(void) /在main函数之前定义 cint.hour; cint.minute; cint.sec; void show_time(void)/在main函数之前定义 coutt.hour:t.minute:t.secendl; int main()set_time(); show_time(); return 0; 2.#includ

8、e using namespace std;class Time public: void set_time(void) cinhour; cinminute; cinsec; void show_time(void)couthour:minute:secendl; private: int hour; int minute; int sec; ;Time t;int main() t.set_time(); t.show_time(); return 0; 3.#include using namespace std;class Time public: void set_time(void

9、); void show_time(void); private: int hour; int minute; int sec; void Time:set_time(void) cinhour; cinminute; cinsec; void Time:show_time(void)couthour:minute:secendl;Time t;int main() t.set_time(); t.show_time(); return 0;6.#include using namespace std;class Boxpublic: void get_value(); void volume

10、(); void display(); public: float lengh; float width; float height; float vol; ;void Box:get_value() coutlengh; cinwidth; cinheight;void Box:volume() vol=lengh*width*height;void Box:display() coutvolendl;int main()Box box1,box2,box3; box1.get_value(); box1.volume(); coutvolmue of bax1 is ; box1.disp

11、lay(); box2.get_value(); box2.volume(); coutvolmue of bax2 is ; box2.display(); box3.get_value(); box3.volume(); coutvolmue of bax3 is ; box3.display(); return 0;三章2.分析下面的程序,写出其运行时的输出结果。#include using namespace std;class Date public: Date(int,int,int); Date(int,int); Date(int); Date(); void display(

12、); private: int month; int day; int year; ; Date:Date(int m,int d,int y):month(m),day(d),year(y) Date:Date(int m,int d):month(m),day(d)year=2005; Date:Date(int m):month(m)day=1;year=2005; Date:Date() month=1;day=1; year=2005;void Date:display()coutmonth/day/yearendl;int main()Date d1(10,13,2005); Da

13、te d2(12,30); Date d3(10); Date d4; d1.display(); d2.display(); d3.display(); d4.display(); return 0; 输出结果:10/13/2005 12/30/2005 10/1/2005 1/1/20053.如果将“第二题”中的程序的第5行改为用默认参数,即Date(int=1,int=1,int=2005);分析程序有无问题。上机编译,分析出错信息,修改程序使之能通过编译。要求保留上面一行给出的构造函数,同时能输出相同的输出结果。#include using namespace std;class Da

14、te public: Date(int=1,int=1,int=2005); void display(); private: int month; int day; int year; ; Date:Date(int m,int d,int y):month(m),day(d),year(y) void Date:display()coutmonth/day/yearendl; int main() Date d1(10,13,2005); Date d2(12,30); Date d3(10); Date d4; d1.display(); d2.display(); d3.display

15、(); d4.display(); return 0; 四题建立一个对象数组,内放5个学生的数据(学号,成绩),用指针指向数组首元素, 输出第1,3,5个学生的数据#include class studentpublic: student(int a=0,int b=0); student(); student(student &m); void display(void);/显示学号和成绩 void setnum(int n); void setmark(int m);private: int num; int mark;student:student(int a,int b)num=a;

16、mark=b;void student:setnum(int n) num=n;void student:setmark(int m)mark=m;void student:display(void)cout学号:numendl; cout成绩:markendl;student:student(student &m) num=m.num; mark=m.mark; student:student() int main() int i,m,n; student *p; p=new student5; for(i=0;i5;i+) coutn; (p+i)-setnum(n); coutm; (p

17、+i)-setmark(m); for(i=0;idisplay(); delete p; return 0;5题建立一个对象数组,内放5个学生的数据(学号,成绩),设立一个函数max,用指向对象的指针作函数参数,在max 函数中找出5个学生中成绩最高者,并输出学号#include using namespace std;class student public: void input(); int num; int score;void student:input() cout num; cout endl; cout score; cout endl; cout endl;void mai

18、n() student a5; for (int i=0; i5; i+) cout i+1 : ; ai.input(); student *max(student&, student&); student *p; p = &a0; for (i=0; i4; i+) p = max (*p,ai+1); cout max = num score (c2.score) return &c1; else return &c2;10.将例3.13程序中的display函数不放在Time类中,而作为类外的普通函数,然后分别在Time和Date类中将display声明为友元函数。在主函数中调用dis

19、play函数,display函数分别引用Time和Date两个类的对象的私有数据,输出年、月、日和时、分、秒。#include using namespace std;class Date;class Time public: Time(int,int,int); friend void display(const Date &,const Time &); private: int hour; int minute; int sec; ; Time:Time(int h,int m,int s) hour=h; minute=m; sec=s; class Date public: Date

20、(int,int,int); friend void display(const Date &,const Time &); private: int month; int day; int year; ; Date:Date(int m,int d,int y) month=m; day=d; year=y; void display(const Date &d,const Time &t)coutd.month/d.day/d.yearendl;coutt.hour:t.minute:t.secendl; int main() Time t1(10,13,56); Date d1(12,2

21、5,2004); display(d1,t1); return 0; 11.将例3.13中的Time类声明为Date类的友元类,通过Time类中的display函数引用Date类对象的私有数据,输出年、月、日和时、分、秒。#include using namespace std;class Time;class Date public: Date(int,int,int); friend Time; private: int month; int day; int year; ; Date:Date(int m,int d,int y):month(m),day(d),year(y) clas

22、s Time public: Time(int,int,int); void display(const Date &); private: int hour; int minute; int sec; ; Time:Time(int h,int m,int s):hour(h),minute(m),sec(s) void Time:display(const Date &d)coutd.month/d.day/d.yearendl;couthour:minute:secendl; int main() Time t1(10,13,56); Date d1(12,25,2004); t1.di

23、splay(d1); return 0;四章1. 定义一个复数类complex,重载运算符“+”,使之能用于复数的加法运算。将运算符函数重载为非成员、非友元的普通函数。求两个复数之和。#include using namespace std;class Complex public: Complex()real=0;imag=0; Complex(double r,double i)real=r;imag=i; double get_real(); double get_imag(); void display(); private: double real; double imag; ; d

24、ouble Complex:get_real()return real;double Complex:get_imag()return imag;void Complex:display()cout(real,imagi)endl;Complex operator + (Complex &c1,Complex &c2)return Complex(c1.get_real()+c2.get_real(),c1.get_imag()+c2.get_imag();int main()Complex c1(3,4),c2(5,-10),c3; c3=c1+c2; coutc3=; c3.display

25、(); return 0;有两个矩阵a和b,均为2行3列。求两个矩阵之和。重载运载符“+”,使之能用于矩阵相加。如:c=a+b#include Class Matrix /定义Matrix类 public: Matrix(); /默认构造函数 friend Matrix operator+(Matrix &,Matrix &); /重载运算符“+” void input(); /输入数据函数 void display(); /输出数据函数 private: int mat23; ;Matrix:Matrix() /定义构造函数for(int i=0;i2;i+) for(int j=0;j3;

26、j+) matij=0;Matrix operator+(Matrix &a,Matrix &b) /定义重载运算符“+”函数Matrix c; for(int i=0;i2;i+) for(int j=0;j3;j+) c.matij=a.matij+b.matij; return c; void Matrix:input() /定义输入数据函数coutinput value of matrix:endl; for(int i=0;i2;i+) for(int j=0;jmatij;void Matrix:display() /定义输出数据函数for (int i=0;i2;i+) for(

27、int j=0;j3;j+) coutmatij ; coutendl;int main()Matrix a,b,c; a.input(); b.input(); coutendlMatrix a:endl; a.display(); coutendlMatrix b:endl; b.display(); c=a+b; /用重载运算符“+”实现两个矩阵相加 coutendlMatrix c = Matrix a + Matrix b :endl; c.display(); return 0;九题分别声明Teacher(教师)类和Cadre(干部)类,采用多重继承方式由这两个类派生出新类(教师兼

28、干部)。要求:在两个基类中都包含姓名,年龄,性别,地址,电话等数据成员。在Teacher类中还包含数据成员title(职称),在Cadre类中还包含数据成员post(职务)。在TeacherCadre类中还包含数据成员wages(工资)。对两个基类中的姓名,年龄,性别,住址,电话等数据成员使用相同的名字,在引用这些数据成员时,指定作用域。在类体中声明成员函数。在类定义外定义成员函数。在派生类Teacher_Cadre的成员函数show中调用Teacher类中的display函数,输出姓名、年龄、性别、职称、地址、电话、然后再用cout语句输出职务与工资#include#include usin

29、g namespace std;class Teacher public: Teacher(string nam,int a,char s,string tit,string ad,string t); void display(); protected: string name; int age; char sex; string title; string addr; string tel;Teacher:Teacher(string nam,int a,char s,string tit,string ad,string t):name(nam),age(a),sex(s),title(tit),addr(ad),tel(t) void Teacher:display() coutname:nameendl; coutageageendl; coutsex:sexendl; couttitle:titleendl; coutaddress:addrendl; couttel:t

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论