《C++ Primer Plus(第六版)》(26)(第十三章 类继承 复习题答案)

13.10 复习题


1.派生类从基类那里继承了什么?

成员数据,还有一半的成员函数,

公有成员和保护成员是可见的,私有成员不可见


2.派生类不能从基类那里继承什么?

构造函数,析构函数,赋值运算符,还有友元函数,都不能继承。


3.假设baseDMA::operator=()函数的函数返回类型为void,而不是baseDMA&,这将有什么后果?如果返回类型为baseDMA,而不是baseDMA&,又将有什么后果?
返回类型为void,可以进行单个赋值,但是不能进行连续的赋值,例如a=b=c这种情况
返回了baseDMA,则返回一个副本,增加程序的消耗,效率降低

4.创建和删除派生类对象时,构造函数和析构函数的调用顺序是怎样的?
创建的时候先调用基类的构造函数,析构的时候先调用派生类的析构函数

5.如果派生类没有添加任何数据成员,它是否需要构造函数?
需要,构造函数是不能继承自基类的,即使自己不写,系统也会生成一个默认的。

6.如果基类和派生类定义了同名的方法,当派生类对象调用该方法时,被调用的将是哪个方法?
调用的是派生类的方法

7.在什么情况下,派生类应定义赋值运算符?
在派生类的构造函数使用了new或者new[]来初始化指针成员的时候

8.可以将派生类对象的地址赋值给基类指针吗?可以将基类对象的地址赋值给派生类指针吗?
可以,不可以(除非定义了转换运算符)

9.可以将派生类对象赋给基类对象吗?可以将基类对象赋值给派生类对象吗?
可以,不可以(除非定义了转换运算符)

10.假设定义了一个函数,它将基类对象的引用作为参数。为什么该函数也可以将派生类对象作为参数?
C++允许基类引用指向从该基类派生而来的任何类型

11.假设定义了一个函数,它将基类的对象作为参数(即函数按值传递基类对象)。为什么该函数也可以将派生类对象作为参数?
使用复制构造函数,构造了一个基类的临时对象。

12.为什么通常按引用传递对象比按值传递对象的效率更高?
值传递是新建一个临时对象,然后将参数的值复制到这个新的对象当中。而引用传递则直接使用原来的对象,省了很多功夫。
另外如果函数内使用了对象的某个虚函数,则会优先调用派生类的函数。这个已经不是性能的问题了,而是功能性的问题。

13.假设Corporation是基类,PublicCorporation是派生类。再假设这两个类都定义了head()函数,ph是指向Corporation类型的指针,且被赋给了一个PublicCorporation对象的地址。如果基类将head()定义为:
a.常规非虚方法;
b.虚方法;
则ph->head()将被做如何解释?
a.调用基类的函数
b.调用派生类的函数

14.下述代码有什么问题?
//
//  Test.h
//  HelloWorld
//
//  Created by feiyin001 on 16/12/21.
//  Copyright (c) 2016年 FableGame. All rights reserved.
//

#ifndef _Test_H_
#define _Test_H_
#include <iostream>
using namespace std;
namespace FableGame
{
	class Kitchen
	{
	public:
		Kitchen() { kit_sq_ft = 0; }
		virtual double area() const { return kit_sq_ft * kit_sq_ft; }
	protected:
	private:
		double kit_sq_ft;
	};

	class House:public Kitchen
	{
	public:
		House(){ all_sq_ft += kit_sq_ft; }
		double area(const char * s) const{ cout << s; return all_sq_ft; }
	protected:
	private:
		double all_sq_ft;
	};
 
}
#endif
a.首先从语义上来看,厨房和房子不是is-A关系,而是has-A关系,所以不应该使用继承,而是将Kitchen作为House的一个成员。
b.kit_sq_ft是私有成员,House中无法直接访问。
c.除了声明为成员,还可以构造一个虚基类,因为他们都有长度,面积之类的属性。
d.House的area()函数,隐藏了基类的。因为他们特征标不同。


  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值