面向对象程序设计C++课后题答案 联系客服

发布时间 : 星期四 文章面向对象程序设计C++课后题答案更新完毕开始阅读3296727c31b765ce05081489

第四章:类和对象(二)

[4_1]什么是对象数组

所谓对象数组是指每一数组元素都是对象的数组,也就是说,若一个类有若干个对象,我们把这一系列的对象用一个数组来存放。对象数组的元素是对象,不仅具有数据成员,而且还有函数成员。

[4_2]什么是this指针?它的主要作用是什么?

C++为成员函数提供了一个名字为this的指针,这个指针称为自引用指针。每当创建一个对象时,系统就把this指针初始化为指向该对象。每当调用一个成员函数时,系统就自动把this指针作为一个隐含的参数传给该函数。不同的对象调用同一个成员函数时,C++编译器将根据成员函数的this指针所指向的对象来确定应该引用哪一个对象的数据成员。 [4_3]友元函数有什么作用?

友元函数不是当前类的成员函数,而是独立于当前类的外部函数,但它可以访问该类的所有对象的成员,包括私有成员和公有成员。通过友元函数可以在不放弃私有数据安全的情况下,使得类外部的函数能够访问类中的私有成员。 当一个函数需要访问多个类时,友元函数非常有用,普通的成员函数只能访问其所属的类,但是多个类的友元函数能够访问相应的所有类的数据。此外,在某些情况,例如运算符被重载时,需要用到友元函数。

[4_4]假设在程序中已经声明了类point,并建立了其对象p1和p2。请回答以下 几个语句有什么区别?

(1)point p1,p2; 用带缺省参数的构造函数或不带参数的构造函数,定义了point 类的2个对象p1和p2。

(2)point p2=p1; 依据已存在的对象p1,用赋值形式调用拷贝构造函数,创建对 象p2。

25

(3)point p2(p1); 依据已存在的对象p1,用显示调用拷贝构造函数,创建对象 p2

(4)p2=p1; 对象赋值语句,将对象p1数据成员的值拷贝到对象p2中。 [4_5]在下面有关静态成员函数的描述中,正确的是(B)见书133页

说明:C++中规定在建立对象前,就可以为静态数据成员赋值。同时规定在静态 成员函数中不能使用this指针。静态成员函数在类外定义时,不需要用 static前缀。静态成员函数即可以在类内定义也可以在类外定义 [4_6]在下面有关友元函数的描述中,正确的说法是(A)(134)

说明:在C++中友元函数是独立于当前类的外部函数,一个友元函数可以同时定 义为两个类的友元函数。友元函数即可以在类的内部也可以在类的外部定 义,而在外部定义友元函数时,不必加关键字friend [4_7]友元函数的作用之一是(A)(134)

说明:由于友元函数可以直接访问对象的私有成员,所以友元的作用是提高程序 运行的效率。

[4_8]指出下面程序的错误,并说明原因:答案是将其中对应的2条改成: cout<get_sno()<<”\\n”; 因为:非静态成员函数的调用方法与静态成员函数的调用方法不同。 [4_9]答:

#include #include class CTest { public: const int y2;

CTest(int i1,int i2):y1(i1),y2(i2)

26

{ y1=10; //错误,y1是调用const定义的,不能修改 x=y1; }

int readme() const; // ….. private: int x; const int y1; };

int CTest::readme() const { int i; i=x;

x++; //错误,函数定义用了const,表示该函数不能修改对象 return x; }

void main() { CTest c(2,8); int i=c.y2;

c.y2=i; //错误,y2是常量,不能修改 i=c.y1; //错误,y1是私有变量,不能直接存取 }

[4_10]答:

#include #include class CTest

27

{ public: CTest () { x=20; } void use_friend(); private: int x;

friend void friend_f(CTest fri); };

void friend_f(CTest fri) { fri.x=55; }

void CTest::use_friend() { CTest fri;

this->friend_f(fri); //错误。友元函数不是成员函数,所以不能用this->调用友//元函数 ::friend_f(fri); }

void main() { CTest fri,fri1;

fri.friend_f(fri); //错误,友元函数不是成员函数,所以不能用对象.函数名调 //用友元函数 friend_f(fri1); }

[4_11]答:

#include #include

28