C++Primer 第15章-面向对象编程-课后习题答案

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

第十五章面向对象编程

1。什么是虚成员?

在类中被声明为virtual的成员,基类希望这种成员在派生类中重定义。除了构造函数外,任意非static成员都可以为虚成员。

2。给出protected访问标号的定义。它与private有何不同?

protected为受保护的访问标号,protected成员可以被该类的成员、友元和派生类成员(非友元)访问,而不可以被该类型的普通用户访问。

而private成员,只能被基类的成员和友元访问,派生类不能访问。

3。定义自己的Item_base类版本。

class Item_base

{

public:

Item_base( const string &book = '', double sales_price = 0.0) :

isbn( book ), price( sales_price ) { }

string book( ) const

{

return isbn;

}

virtual double net_price( size_t n ) c onst

{

return price * n;

}

virtual ~Item_base() { }

private:

string isbn;

protected:

double price;

};

4。图书馆可以借阅不同种类的资料—书、CD、DVD等等。不同种类的借阅资料有不同的登记、检查和过期规则。下面的类定义了这个应用程序可以使用的基类。指出在所有借阅资料中,哪些函数可能定义为虚函数,如果有,哪些函数可能是公共的。(注:假定LibMember 是表示图书馆读者的类,Date是表示特定年份的日历日期的类。)

class Library

{

public:

bool check_out( const LibMember& );

bool check_in( cosnt LibMember& );

bool is_late( const Date& today );

double apply_fine();

ostream& print( ostream& = count );

Date due_date() const;

Date date_borrowed() const;

string title() const;

const LibMember& member() const;

};

因为有不同的登记、检查、和过期规则,所以

bool check_out( const LibMember& );

bool check_in( cosnt LibMember& );

bool is_late( const Date& today );

double apply_fine();

ostream& print( ostream& = count );

这几个函数应该被定义为虚函数,print函数可能用于打印不同的项目的内同,也定义为虚函数。

其他几个函数,因为操作都有公共性质,所以应该是公共的。

5。如果有,下面的声明中哪些是错误的?

class Base { …};

(a) class Derived : public Derived { … };

(b) class Derived : Base { … };

(c) class Derived : Private Base { … };

(d) class Derived : public Base;

(e) class Derived : inherits Base { … };

(a) 错误,不能用类本身作为类的基类,(d) 声明类时,不可以包含派生列表。

(e) 派生不能用inherits

6。编写自己的Bulk_item类版本。

class Bulk_item : public item_base

{

public:

double net_price( size_t cnt ) const

{

if ( cnt > min_qty )

return cnt * ( 1- discount ) * price;

else

return cnt * price;

}

private:

size_t min_qty;

double discount;

};

7。可以定义一个类型实现有限折扣策略。这个类可以给低于某个上限的购书量一个折扣,如果购买的数量超过该上限,则超出部分的书应按正常价格购买。定义一个类实现这种策略。class Ltd_item : public item_base

{

public:

Ltd_item( const string& book = “”, double sales_price, size_t qty = 0, double disc_rate = 0 ) : item_base( book, sales_price), max_qty( qty ), discount( disc_rate ) { } double net_price( size_t cnt ) const

{

if ( cnt <= max_qty )

return cnt * ( 1- discount ) * price;

else

return cnt* price – max_qty * discount * price;

}

private:

size_t max_qty;

double discount;

};

8。对于下面的类,解释每个函数:

struct base

{

string name() { return basename; }// 返回私有成员basename

virtual void print( ostream &os ) { os << basename; } // 打印私有成员basename private:

string basename;

};

struct derived

{

void print() { print(ostream &os ); os << ““ << mem; } // 首先调用base类的ptint函数,然后打印一个空格和私有成员mem

private:

int mem;

};

如果该代码有问题,如何修正?

相关文档
最新文档