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

发布时间 : 星期六 文章面向对象程序设计课后习题答案更新完毕开始阅读360b99106edb6f1aff001f3e

ss.push(str[i]);

for(i=0;i

cout<<\ \ cout<

附:用C写反序输出程序

步骤:打开VC系统,FileànewàFileàC++Source Fileà改变路径Location为本章的路径àFile处写文件名àokà开始写C程序à之后编译运行 #include #include //#include main()

{ int inverse(char str[]); //函数原型说明 char str[100];

printf(\ scanf(\ inverse(str);

printf(\}

int inverse(char str[]) //函数定义 { char t; int i,j;

for(i=0,j=strlen(str);i

str[i]=str[j-1]; str[j-1]=t; }

return 0; }

第四章:类和对象(二)

[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。

(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)

{ 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 { 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 class CTest { public: CTest()

{ x=20; } void use_this(); private: int x; };

void CTest::use_this() { CTest y,*pointer;

this=&y; //错误,不能对this直接赋值

*this.x=10; //错误,按优先级原句的含义是*(this.x)=10,显然不对,正确的写 //法是(*this).x=10;或this->x=10; pointer=this; pointer=&y; }

void main() { CTest y;

this->x=235; //错误,this的引用不能在外部函数中,只能在内部函数中。 }

[4_12]答:运行结果是: 10,20 30,48 50,68 70,80 90,16 11,120

[4_13]答:运行结果是: Constructing 10

Destructing. 100

Destructing

[4_14]答:运行结果是: 3 objects in existence