《C++程序设计》习题解答(10)

2019-08-30 20:09

(5)说明友元关系的概念,说明友元关系的副作用? (6)什么是构造函数和析构函数?各有哪些特点? (7)什么是拷贝初始化构造函数?它有何作用?

(8)在C++中,对象作为函数参数与对象指针作为函数参数有何不同? (9)什么是this指针?

(10)使用const修饰指针时,const出现的位置对功能有何影响? (11)对象指针作函数参数和对象引用作函数参数有何区别?

(12)对象数组是怎样进行声明的?怎样建立对象数组和标志对象数组的元素? (13)常类型有几种?如何定义它们?

(14)下列程序段建立了指针对象P与对象数组A的链接关系:

int a[5], i ; int *P=&a[0];

解释下列语句的语义: ① i=*p++; ② i=*++p; ③ P=P+2; ④ P=a+4;

(15)说明下面的程序中this和*this的用法。

#include class B {

public: B(){ a=b=0;} B(int i,int j){a=i;b=j;} void copy(B &aa); void print() { cout<

void B::copy(B &aa) { if(this==&aa) return ; *this=aa; }

void main() { B a1,a2(30,40); a1.copy(a2); a1.print(); }

(16)分析下列程序,指出该程序中定义了几种常类型量。

#include class C {

public: C(int i) { p=i; } int getp() { return p; } const int fun(int i)const { return p+i; } private: int p; };

void main() { C a(4); const int b=a.fun(6); int c=a.getp(); cout<

cout<

参考答案:

(1)在C++中,可以有两种方法定义对象:

① 在声明类的同时,直接定义对象,即在声明类的有花括号“}”后,直接写出要定义的对象。例如:

class Time {

private: ?? } t1,t2;

在声明Time类的同时,直接定义了Time类的两个对象t1和t2。此时定义的对象是全局对象。

② 在声明类之后,在使用时再定义对象,定义的格式和一般变量的定义格式相同。例如:

class Time {

?? }; main() { Time t1,t2; ?? }

(2)存储5个数据项副本,1个成员函数副本。

(3)一个类就是用户声明的一个数据类型,而且是一个抽象数据类型,类的对象可以看成其所属类数据类型的一个实例,C++把类的变量叫做类的对象,对象也称为类的实例。

(4)公有成员用public来说明,往往是一些操作(即成员函数),它是提供给用户的功能接口。这部分成员不但可以被类中的成员函数访问,还可以在类的外部,通过类的成员进行访问。私有成员用private来说明,通常是一些数据成员,这些成员用来描述该类对象的属性,用户在类的外部是无法访问它们的,即不能通过对象加以访问。只有类中的成员函数或经特殊说明的函数才可以访问它们,它们是类中被隐藏的部分。

(5)友元提供了不同类的成员函数之间、类的成员函数与一般函数之间进行数据共享的机制,提高了编程的灵活性,在某些情况下可以提高程序的执行效率。但是它们却与面向对象编程的某些原则相悖,破环了类的封装性和数据的隐藏性。

(6)构造函数是一个特殊的成员函数,其功能是在创建对象时,使用特定的值将对象的数据成员进行初始化,为对象分配空间。构造函数有以下一些特性:

① 构造函数的名字必须与类名相同。

② 构造函数可以有任意类型的参数,但不能指定返回类型,它有隐含的返回值,该值由系统内部使用。

③ 构造函数可以有一个参数,也可以有多个参数,即构造函数可以重载。 ④ 构造函数体可以写在类体内,也可以写在类体外。 ⑤ 构造函数与一般函数和成员函数一样可以带默认参数。

⑥ 构造函数一般被声明为公有函数。程序中不能直接调用构造函数,在创建对象时由系统自动调用。

析构函数也是一个特殊的成员函数,其功能与构造函数的功能正好相反,是当对象被撤销时,释放该对象所占据的存储空间。一般情况下,析构函数的执行顺序与构造函数相反。析构函数的名字与类名相同,在名字前面加上“~”字符,用来与构造函数加以区别。

析构函数不指定数据类型,也没有参数。析构函数是成员函数,函数体可写在类体内,也可写在类体外。析构函数不能重载,即一个类只能定义一个析构函数。析构函数可以由程序调用,也可以由系统自动调用。

(7)在程序中常常需要用一个已知的对象来初始化另一个同类的对象。复制构造函数就是这样一种特殊的构造函数。其功能是在初始化时用来将已知对象的数据成员的值复制给正在创建的另一个同类的对象。

(8)使用对象指针作为函数参数可以实现传址调用,即可在被调用函数中改变调用函数的参数对象的值,实现函数之间的双向信息传递。同时,使用对象指针作为函数的参数,实参仅将对象的地址值传递给形参,并不需要进行实参和形参对象间值的拷贝,也不必为形参分配空间,这样可以提高程序的运行的效率,节省了时间和空间的开销。

使用对象作为函数参数实现传值调用不可在被调用函数中改变调用函数的参数对象的值。

(9)this指针也是一个指向对象的指针,不过比较特殊。它隐含在类的成员函数中,

用来指向成员函数所属类的正在被操作的对象。

(10)当使用const修饰指针时,有两种含义:一用const限定所指对象为常量,此时,这个指针称为指向常量的指针;二用const限定的指针是一个常量,指针指向的对象可以改变,该指针称为指针常量。

指向常量的指针定义格式如下: const 类型 * 指针; 或者

类型 const * 指针; (11)使用对象指针作为函数参数可以实现传址调用,即可在被调用函数中改变调用函数的参数对象的值,实现函数之间的双向信息传递。同时,使用对象指针作为函数的参数,实参仅将对象的地址值传递给形参,并不需要进行实参和形参对象间值的拷贝,也不必为形参分配空间,这样可以提高程序的运行的效率,节省了时间和空间的开销。

使用对象的引用作函数参数时,对象的引用作为函数参数不仅具有用对象指针作为函数的参数的优点,而且更简洁、更直观。

(12)对象数组定义的一般格式为: 类名 对象数组名[长度]… 其中,类名是要定义对象数组元素所属类的名字,即所定义的对象数组元素是该类类型的对象。[长度]指的是数组元素的个数。有一个方括号是一维,有两个方括号是二维,多个方括号是多维。

在使用对象数组时也只能引用单个数组元素。每一个数组元素都是一个对象,通过这个对象,便可以访问到它的成员函数,一般形式如下:

数组名[下标].成员名

定义对象数组的类,要有无参的构造函数,或构造函数的参数有默任值。当定义一个对象数组时,系统为对象数组的每一个数组元素调用一次构造函数,来初始化每一个数组元素。

(13)

① 常对象 类名 const 对象名; ② 常指针 const 类型 * 指针;

或者

类型 const * 指针;

③ 常引用 const 类型说明 &引用名;

④ 常成员函数 类型说明 函数名(参数表) const; ⑤ 常数据成员 (14)

① 先把p所指内容取出赋给i,p之后++即指向a[1]; ② 先把p++即指向a[1],再把里面的内容取出赋给i; ③ 把a[2]的地址赋给指针变量p; ④ 把a[4]的地址赋给指针变量p;

(15)this指针是指向当前对象,*this指当前对象。 (16)返回一个常量类型的常量成员函数fun()

4.编程题

(1)已知圆形的半径,编写程序计算其周长和面积,用类来实现。

(2)编写程序创建Number类,它有两个整型数据成员x和y。它应包含成员函数以读取数据,对两个数据进行加、减、乘、除运算,并显示结果。

(3)编写程序,处理学生成绩单。可以从键盘读取下列各项:

Name of student(学生姓名) Roll number(学号) Subject_ID(学科编号) Subject Marks(学科成绩)

假定考试涉及5个学科。在程序中应显示考试分数。还应该包括成员函数,用于计算和显示5个学科的总分及平均分。可以使用下面的类结构:

class Student {

private:

char name[30]; int rollno; int sub_ID[5]; int sub_marks[5]; public:

void getinfo(); int total(); void display(); int averate(); }; (4)设计一个表示矩形的类Rectangle,其数据成员为double *Length和double *Width,设计各种操作,并且应用指针建立对象测试类。

(5)编写程序,从键盘读入学生的出生日期,读取格式为:日 月 年,并按此格式输出。例如,输入为12 10 1998,则输出为:“12 October 1998”。要求按类形式完成。

(6)编写程序,从键盘读入整数,计算出各位数字之和,直到为一位数字。例如:输入数据是2896

sum=2+8+9+6=25 sum=2+5=7

可以使用下面具有一个整型数据成员和成员函数的类结构来接收用户输入的数据,进行和计算,然后显示结果。

class Number {

private: int num; public: void getdata(); int adddigits(); void display(); };

结果显示为下面格式:

The sum of digits of 2896 is 7. 参考答案:

(1)#include

class circle {


《C++程序设计》习题解答(10).doc 将本文的Word文档下载到电脑 下载失败或者文档不完整,请联系客服人员解决!

下一篇:江苏省县级以上集中式饮用水水源地保护区的划分 - 图文

相关阅读
本类排行
× 注册会员免费下载(下载后可以自由复制和排版)

马上注册会员

注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
微信: QQ: