C++ Primer Plus(第6版) 复习题汇总
目录
10 对象和类
(1)什么是类?
(2)类如何实现抽象、封装和数据隐藏?
(3)对象和类之间的关系?
(4)除了是函数之外,类函数成员与类数据成员之间的区别是什么?
(5)定义一个类来表示银行帐户。
(7)给出复习题5中的银行账户类的构造函数的代码。
(8)什么是默认构造函数,拥有默认构造函数的好处?
(9)修改Stock类的定义。
(10)this和*this是什么?
10 对象和类
参考文章:《C++ Primer Plus》第十章 对象和类-小结、复习题详解_simon_fighting的博客-CSDN博客
(1)什么是类?
类是用户自己定义的数据类型,里面包括了想要描述操作的数据和数据存储形式以及操作数据要用的方法和函数即接口函数。
(2)类如何实现抽象、封装和数据隐藏?
抽象:类表示人们可以类方法的公有接口对类对象执行的操作,这是抽象。
封装:类的数据成员可以是私有的,也就是说只能通过成员函数来访问这些数据,这就是数据隐藏。实现的具体细节都是隐藏的,这就是封装。
数据隐藏:类里面定义private部分,私有部分只有通过成员函数才能访问类的成员数据。
(3)对象和类之间的关系?
类定义了一种数据类型,包括如何使用它。对象是一个变量或其它数据对象,并根据类定义被创建和使用。类和对象之间的关系同标准类型与变量之间的关系相同。
(4)除了是函数之外,类函数成员与类数据成员之间的区别是什么?
如果创建给定类的多个对象,则每个对象都有其自己的数据内存空间;但所有的对象都使用同一组成员函数(通常,方法是公有的,而数据是私有的,但这只是策略方面的问题,而不是对类的要求)。
(5)定义一个类来表示银行帐户。
数据成员包括储户姓名、 账号(使用字符串) 和存款。 成员函数执行如下操作:
- 创建一个对象并将其初始化;
- 显示储户姓名、 账号和存款;
- 存入参数指定的存款;
- 取出参数指定的款项。
class BankAccount
{ private:char name[50];char accountnum[50];double balance;public:BankAccount(const char *client, const char *num, double bal = 0.0);//创建对象并且初始化void show(void) const;void deposit(double cash);void withdraw(double cash);};
(6)类构造函数在何时被调用?类析构函数呢?
在创建类对象或显式调用构造函数时,类的构造函数都将被调用。当对象过期时,类的析构函数将被调用。
(7)给出复习题5中的银行账户类的构造函数的代码。
BankAccount::BankAccount(const char *client, const char *num, double bal) //定义形参不添加默认参数
{ name = client;accountnum = num;balance = bal;
}
(8)什么是默认构造函数,拥有默认构造函数的好处?
默认构造函数是没有参数或所有参数都有默认值的构造函数。拥有默认构造函数后,可以声明对象而不初始化它,即使已经定义了初始化构造函数。它还使得能够声明数组。
(9)修改Stock类的定义。
使之包含返回各个数据成员值的成员函数。 注意: 返回公司名的成员函数不应为修改数组提供便利, 也就是说, 不能简单地返回string引用。
#ifndef __STOCK20_H__
#define __STOCK20_H__#include <string>
//类只作函数的声明
class Stock
{private:std::string company;//公司名称long shares; //股票支数double share_val;//每支股票的价格double total_val;//一共股票的总价格void set_tot() {total_val = shares * share_val;}//比较简短就设置为内联函数public:Stock();// Stock(const std::string &co = "Error", long n= 0, double pr =0.0); //默认构造函数Stock(const std::string &co , long n, double pr);//获取哪家公司的股票,买多少支股票,每支股票价格~Stock();void buy(long num , double price);//购买股票的数量和价格void sell(long num , double price);//出售股票的数量和价格void update(double price);//更新股票的价格void show() const;//显示股票当前信息//函数返回值是const 类型的引用,函数名为topval,不允许通过this指针隐式访问对象const Stock &topval(const Stock &s) const;const string &company_name() const{return company;}long num_shares() const {return share;}double shareval() const {return share_val;}double totalval() const {return total_val;}};
#endif
(10)this和*this是什么?
this指针是类方法可以使用的指针,它指向用于调用方法的对象。因此,this是对象的地址,*this就是对象本身。