学习笔记十:面向对象编程

1.一般可以使用派生类型对象对基类对象进行赋值和初始化。但编译器不会自动将派生类型对象转换为基类类型对象。对对象进行初始化和赋值可以自动转换引用和指针,之间的区别是微妙的,必须好好理解。(但是我理解不了,。。。。叙述见Primer中文版第四版488页)
2.派生类只能初始化直接基类。
3.只含有类类型或内置类型数据成员,不含指针的类一般可以使用合成的复制/赋值或析构操作,而不需要特殊控制。具有指针成员的类一般需要定义自己的复制控制来管理这些成员。
4.基类析构函数是三法则(复制操作符/赋值操作符/析构函数常一起出现)的一个重要例外。如果基类为了将析构函数设为虚函数而具有空析构函数,那么,类具有析构函数并不表示也需要赋值操作符或复制构造函数。
5.即使析构函数没有要做,继承层次的根类也应该定义一个虚析构函数。
6.派生类中定义的函数也不重载基类中定义的成员。如果派生类想通过自身类型使用所有的重载版本,则派生类必须要么重定义所有重载版本,要么一个也不重定义。不过这么做十分令人厌烦。为了解决这个问题,c++提供一种方式:使得派生类不用重定义所继承的每一个基类版本,只要为重载成员提供using声明,表明该版本只采用基类版本。
7.将函数定义为纯虚函数,是为后代类型提供可以覆盖的接口。
8.含有(或继承)一个或多个纯虚函数的类是抽象基类。处理作为抽象基类的派生类的对象的组成部分,不能创建抽象类型的对象。(2点理解:(1)抽象基类一般作为接口;(2)继承一个或多个纯虚函数指的是其基类中含有纯虚函数,但在其本身类中没有对它重定义)
9.在我们使用容器,且容器的元素是类类型时,为了保存继承关系,我们不能使用对象(因为对象不是多态的,——将派生类对象复制到基类对象时,派生类对象的派生部分会被切掉)。唯一可行的选择是使用对象的指针作为容器元素(至于为什么不能采用引用,见9.1.2,引用不能作为容器元素)但采用指针的代价就是用户需要面对管理对象和指针的问题——这里可以采用句柄(包含计数指针的类)来进行对象和指针的管理。(从这一段我们明确了一个问题:什么时候容器的元素需要采用对象的指针:那就是要保存继承关系时如果不需要考虑继承的话,可以直接将类对象作为容器元素
——颇具讽刺意味:不能采用对象支持面向对象编程,相反,必须使用指针或引用。
8.设计程序的一个良好习惯是首先将程序所涉及的操作列出来。明确需要提供的操作有助于建立需要的数据结构和实现这些行为。(明确数据结构和操作)
9.(1)抽象类不能实例化;(2)抽象方法是必须被子类重写的方法;(3)如果类中包含抽象方法,那么类就必须定义为抽象类,不论是否还包含其他一般方法。
10.抽象类通常代表一个抽象概念,它提供一个继承的出发点,当设计一个新的抽象类时,一定是用来继承的,所以,在一个以继承关系形成的等级结构里面,树叶节点应当是具体类,而树枝节点应当是抽象类。
11.接口是把隐式公共方法和属性组合起来,以封装特定功能的一个集合。一旦类实现了接口,类就可以支持接口所知道的所有属性和成员。声明接口在语法上和声明抽象类完全相同,但不允许提供接口中任何成员的执行方式。实现接口的类必须要实现接口中的所有方法和属性。一个类可以支持多个接口,多个类也可以支持相同的接口。
12.第一.类是对对象的抽象;抽象类是对类的抽象;接口是对行为的抽象。第二.如果行为跨越不同类的对象,可使用接口:对于一些相似的类对象,用继承抽象类。第三.从设计角度讲,抽象类是从子类中发现了公共的东西,泛化出父类,而接口是根本不知道子类的存在,方法如何实现还不确认,预先定义。
13.抽象类往往是通过重构得来的,这体现了敏捷开发的思想,通过重构改善既有代码的设计
14.一般可以这么理解:抽象类是自底而上抽象出来的,而接口则是自顶而下设计出来的。
15.装箱就是将值类型打包到object引用类型的一个实例中。拆箱就是指从对象中提取值类型。相对简单的赋值而言,装箱和拆箱过程需要进行大量的计算。对值类型进行装箱时,必须分配并构造一个全新的对象。其次,拆箱所需的强制转换也需要进行大量的计算。解决办法:泛型。
16.泛型是指具有占位符(类型参数)的类、结构、接口和方法,这些占位符是类、结构、接口和方法所存储或使用的一个或多个类型的占位符。泛型集合类可以将类型参数用作它所存储的对象的类型的占位符;类型参数作为其字段的类型和其方法的参数类型出现。
17.通常情况下,都建议使用泛型集合,因为这样可以获得类型安全的直接优点而不需要从基集合类型派生并实现类型特定的成员。此外,如果集合元素为值类型,泛型集合类型的性能往往优于对应非泛型集合类型(并且优于从非泛型基集合类型派生的类型),因为使用泛型时不必对元素进行装箱。
18.面向对象的编程,并不是类越多越好,类的划分是为了封装,但分类的基础是抽象,具有相同属性和功能的对象的抽象集合才是类。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值