C++ Primer Plus(第6版) 复习题汇总

本文介绍了C++中的类和对象,包括类的抽象、封装和数据隐藏的概念,对象与类的关系,构造函数和析构函数的作用,以及如何重载运算符。同时,讨论了友元函数的用途和非成员函数访问类成员的条件。文章还提供了具体的类定义示例,如银行账户和Stock类。
摘要由CSDN通过智能技术生成

目录

10 对象和类

(1)什么是类?

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

(3)对象和类之间的关系?

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

(5)定义一个类来表示银行帐户。

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

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

(9)修改Stock类的定义。

(10)this和*this是什么?

11 使用类

(1)使用成员函数为Stonewt类重载乘法运算符。

(2)友元函数与成员函数之间的区别是什么?

(3)非成员函数必须是友元才能访问类成员吗?

(4)使用友元函数为Stonewt类重载乘法运算符。

(5)哪些运算符不能重载?

(6)在重载运算符=、( )、[ ]和->时,有什么限制?

(7)为Vector类定义一个转换函数。


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就是对象本身。

11 使用类

(1)使用成员函数为Stonewt类重载乘法运算符。

该运算符将数据成员与double类型的值相乘。注意,用英石和磅表示时,需要进位。也就是说,将10英石8磅乘以2等于21英石2磅。 (一英石等于14磅)

// prototype
Stonewt operator*(double mult);

// definition - let constructor do the work
Stonewt Stonewt::operator*(double mult)
{
    return Stonewt(mult * pounds);
}

(2)友元函数与成员函数之间的区别是什么?

  • 成员函数是类定义的一部分,通过特定的对象来调用。成员函数可以隐式访问调用对象的成员,而无需使用成员运算符。
  • 友元函数不是类的组成部分,因此被称为直接函数调用。友元函数不能隐式访问类成员,而必须将成员运算符用于作为参数传递的对象。

(3)非成员函数必须是友元才能访问类成员吗?

要访问私有成员,它必须是友元,但要访问公有成员,可以不是友元。

(4)使用友元函数为Stonewt类重载乘法运算符。

该运算符将double值与Stone值相乘。


// 使用友元函数为Stonewt类重载乘法运算符,该运算符将double值与Stone值相乘。
friend Stonewt operator*(double mult, const Stonewt & s);

// definetion - let constructor do the work
Stonewt operator*(double mult, const Stonewt & s)
{
    return Stonewt(mult * s.pounds);
}

(5)哪些运算符不能重载?

【sizeof】【.】【.*】【::】【?:】

(6)在重载运算符=、( )、[ ]和->时,有什么限制?

这些运算符必须使用成员函数来定义。

(7)为Vector类定义一个转换函数。

将Vector类转换为一个double类型的值,后者表示矢量的长度。

operator double() {return mag;}


 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

几度春风里

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值