(一二一)第十章复习题

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
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
提供的源码资源涵盖了安卓应用、小程序、Python应用和Java应用等多个领域,每个领域都包含了丰富的实例和项目。这些源码都是基于各自平台的最新技术和标准编写,确保了在对应环境下能够无缝运行。同时,源码中配备了详细的注释和文档,帮助用户快速理解代码结构和实现逻辑。 适用人群: 这些源码资源特别适合大学生群体。无论你是计算机相关专业的学生,还是对其他领域编程感兴趣的学生,这些资源都能为你提供宝贵的学习和实践机会。通过学习和运行这些源码,你可以掌握各平台开发的基础知识,提升编程能力和项目实战经验。 使用场景及目标: 在学习阶段,你可以利用这些源码资源进行课程实践、课外项目或毕业设计。通过分析和运行源码,你将深入了解各平台开发的技术细节和最佳实践,逐步培养起自己的项目开发和问题解决能力。此外,在求职或创业过程中,具备跨平台开发能力的大学生将更具竞争力。 其他说明: 为了确保源码资源的可运行性和易用性,特别注意了以下几点:首先,每份源码都提供了详细的运行环境和依赖说明,确保用户能够轻松搭建起开发环境;其次,源码中的注释和文档都非常完善,方便用户快速上手和理解代码;最后,我会定期更新这些源码资源,以适应各平台技术的最新发展和市场需求。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值