【24.1.4笔记】C++ Primer自学 Day5

二、C++概述

4、面向对象的设计

        扩展类的实现:1、必须提供自己的实例;2、必须提供实际的操作函数;3、必须提供自己的构造函数。【基类的构造函数无法被派生类继承,派生类的构造函数提供了向基类构造函数传递参数的接口】

inline IntArrayRC::IntArrayRC( int sz) 
: IntArray( sz ) {} 
inline IntArrayRC::IntArrayRC( const int *iar, int sz ) 
: IntArray( iar, sz ) {}

        在冒号后面是派生类向基类传参的接口。这样传参的构造函数不需要提供显式的析构函数,因为在派生类没有引入需要析构的成员,析构函数可以通过基类的析构函数解决。

        C++支持多继承【继承多个类】和虚拟继承【继承派生类】。

Q1:一般来说 类型 / 子类型继承关系反映了一种 is-a 的关系:具有范围检查 功能的 ArrayRC 是一种 Array; 一本书 Book 是一种图书外借资源 LibraryRentalMaterial; 有声书 AudioBook 是一种书 Book; 等等。下面哪些反映出这种 is-a 关系?
                (a)成员函数是一种(isA_kindOf) 函数
                (b)成员函数是一种类
                (c)构造函数是一种成员函数
                (d)飞机是一种交通工具
                (e)摩托车是一种卡车
                (f)圆形是一种几何图形
                (g)正方形是一种矩形
                (h)汽车是一种飞机
                (i)借阅者是一种图书馆
           (a)(c)(d)(f)(g)
Q2:判断以下操作哪些可能是类型相关的,因此可把它们定义为虚拟函数?哪些可以在所有
类之间共享?对单个基类或派生类来说哪些是惟一的?
                (a) rotate(); (b) print();
                (c) size(); (d) dateBorrowed();
                (e) rewind(); (f) borrower();
                (g) is_late(); (h) is_on_loan();
        都可能是类型相关的,都可以共享,都可以是惟一的???
Q3:对于 protected 访问级别的使用已经有了一些争论。有人认为 使用保护访问级 别允许派生类直接访问基类的成员,这破坏了封装的概念,因此,所有的基类实现细节都应 该是私有的 private。 另外一些人认为,如果派生类不能直接访问基类的成员,那么派生 类的实现将无法有足够的效率供用户使用。如果没有关键字 protected, 类的设计者将被迫把 基类成员设置为 public。 你怎样认为?
        我认为两者都有道理,看具体的需求。
Q4:第二个争论是关于将成员函数显式地声明为 virtual 的必要性。一些人认为,这意味着如
果类的设计者没有意识到一个函数需要被声明为 virtual, 则派生类的设计者就没有办法改写 这个关键函数。因此,他们建议把所有成员函数都设置为 virtual 的。另一方面,虚拟函数比 非虚拟函数的效率要低一些 因为它们不能被内联,内联发生在编译时刻,而虚拟函数是 在运行时刻被处理的。 所以它们可能是运行时刻效率低下的原因之一。尤其是小巧而又被 频繁调用的与类型无关的函数,比如 Array 数组的 size 函数。你又怎样认为呢?
        我认为显式声明是有必要的,这样可以更加灵活去改派生类的内容,也能够使一些功能单一但是需要调用很多次的函数可以内联。

5、泛型设计

        

  • 10
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值