(一二一)第十章复习题

来源:互联网 发布:布鲁克大学 知乎 编辑:程序博客网 时间:2024/05/29 19:01

1.什么是类?

答:

类是用户自定义类型,有私有成员(不能被外界直接访问)和公有成员(需要用“类名.公有成员名”来访问)。类的链接性为内部(即只在当前文件可用),类不能在函数内部定义。

补充:类声明指定了数据将如何存储,同时指定了用来访问和操纵这些数据的方法(类成员函数)。

 

 

2.类如何实现抽象、封装和数据隐藏?

答:

实现抽象靠的是类的定义,描述一个东西的各方面情况,用各种基本类型也来表示。

封装是靠使用公共接口,让用户无需理解函数内部定义,只需要知道类的各个成员函数的作用即可。

数据隐藏靠的是私有成员和公有成员分开。用户不能直接访问类对象的私有成员,只能通过类的公共成员函数来访问。

重述:

类表示人们可以以类方法的公有接口对类对象执行的操作,这是抽象。

类数据成员可以是私有的(默认值),这意味着只能通过成员函数来访问这些数据,这是数据隐藏。

实现的具体细节(如数据表示和方法的代码)都是隐藏的,这是封装。

 

 

 

3.对象和类的关系是什么?

答:

类是一种用户自定义的类型,对象使用某一种类。

类一般是程序员、或者是设计类的人自己定义的,而对象是用户在已定义好类的基础上,声明的一个使用类的变量。

重述:

类定义了一种类型,包括如何使用它。对象是一个变量或其他数据对象(如由new生成的),并根据类定义被创建和使用。类和对象之间的关系同标准类型与其变量之间的关系相同。

 

 

4.除了是函数外,类函数成员和类数据成员之间的区别是什么?

答:

类数据成员往往被类所隐藏,是类的私有成员(但不一定必然是);

类函数成员往往被放在类的公有区域(但也有放在私有区域的),成为类的接口;

类数据成员需要被放置在类定义之中,而类函数成员,可以只把原型放在类定义之中,把函数定义放在另一个源文件之中;

补充:每个对象的数据成员都有自己的存储空间,而不同对象(同一类)使用同一组成员函数。

 

 

5.定义一个类来表示银行账户,数据成员包括储户姓名、账号(使用字符串)和存款。成员函数执行如下操作:

①创建一个对象并将其初始化;

②显示储户姓名、账号和存款;

③存入参数指定的存款;

④取出参数指定的款项。

请提供类声明、而不用给出方法实现。

答:

#include<string>//这个我倒没忘,想到了不过没写,但这里还是和答案保持一致吧

class Bankaccount

{

std::string name;

char id[20];

double money; //我用的long long答案用的double,想想还是答案中的好

public:

Bankaccout();

Bankaccout(const std::string na, const char* id_, const double mo);

void show()const; //这三行都忘了加void

void savemoney(const double mo);

void loadmoney(double mo); //这行在参数多加了一个const

}

 

 

 

6.类构造函数在何时被调用?类析构函数呢?

答:

构造函数在类对象被声明时调用,如果是默认构造函数,那么会将默认构造函数的值赋给新对象,如果是非默认构造函数,那么在声明并初始化时,将其参数根据类定义赋给对象。

析构函数在类对象结束时被调用。

 

 

 

 

7.给出复习题5中的银行账户类构造函数的代码。

答:

Bankaccout::Bankaccout(){};

Bankaccout::Bankaccout(const std::string na, const char* id_, const long long mo)

{

name=na;

id=id_;

money=mo;

}

补充:前两个参数可加&表示引用

 

 

 

8.什么是默认构造函数,拥有默认构造函数有什么好处?

答:

默认构造函数是在声明一个类对象,但未使用构造函数对其赋值时调用的函数。

使用默认构造函数可以在声明一个新的类对象时,自动给类对象的私有成员赋值。

补充:无参数、或参数全是默认值的,为默认构造函数

 

 

9.修改Stock类的定义(stock20.h中的版本),使之包含返回各个数据成员值的成员函数。注意:返回公司名的成员函数不应为修改数组提供便利。也就是说,不能简单的返回string引用。

stock类定义:

class Stock

{
private:

std::string company;

int shares;

double share_val;

double total_val;

void set_tot() { total_val = shares * share_val;}

public:

Stock();

Stock(const std::string & co , long n = 0, double pr = 0.0 );

~Stock();

void buy(long num, double price);

void sell(long num, double price);

void update(double price);

void show()const;

const Stock & topval(const Stock & s) const;

}

 

答:

成员函数的添加位置在public之中。附函数原型和函数定义:

①返回company

原型:std::string getname ()const;

函数定义

std::string getname ()const

{
return company;

}

②返回shares

原型:std::string getshares ()const;

函数定义

int getshares ()const

{
return shares;

}

③返回share_val:

原型:std::string getshare_val ()const;

函数定义

double getshare_val ()const

{
return share_val;

}

④返回total_val:

原型:std::string gettotal_val ()const;

函数定义

double gettotal_val ()const

{
return total_val;

}

备注:答案中第一个,返回值用的是const引用,但我觉得,这里不用引用也可以。不用引用的话,返回的是一个拷贝,那就不会导致修改数据了,而这里company也不大,应该无影响。

 

 

10.this和*this是什么?

答:

this是一个指针,他指向当前的类对象的地址。例如,声明一个类,然后创建一个类对象,那么这个类对象的成员函数定义里如果有this,那么指的就是当前这个类对象。如果有另一个类对象,那么另一个类对象里面的成员函数定义里this,指的便是另一个。

*this指的是当前类对象。例如有一个类对象a,那么*this(一般出现在类成员函数定义之中)就指的a。而thisa的内存地址。

 

 

 

0 0
原创粉丝点击