Oop

https://youtu.be/32tDTD9UJCE

Back to Basics: Object-Oriented Programming - Jon Kalb - CppCon 2019

阅读笔记

Scope

本文覆盖的内容,OOP理论,设计指引,最佳实践

image-20210731234106176

作者认为的OOP的定义

image-20210731234143406

从头至尾用一个logger的例子来说明

image-20210731234221781

image-20210731234239429

image-20210731234251284

liskov替换原则

image-20210731234338931 下面这个违反了该原则,因为他没有做应该做的事情

image-20210731234401651

image-20210731234448914

image-20210731234458605

对于继承的误解

用继承来实现代码重用是完全错误的

image-20210731234519988

OOP里面的继承应该是描述的is-a的实现:基类定义接口,继承类实现接口

image-20210731234615680

image-20210731234700884

image-20210731234710467

Scott挑战

如下用法是非法的

image-20210731234734088

OOP其实是欺骗编译器,静态类型是没啥用的,因为静态类型几乎都不是动态类型

image-20210731234811782

他给出的解决方案,其实就是:接口和实现的分离

image-20210731235049883

NVI

他又说了一个他觉得好的做法

image-20210731235207139

代码例子,下面的使用了nvi

image-20210731235255618

他解释为什么要nvi

image-20210731235330251

#

dtor需要是虚函数

override很重要

image-20210731235600921

image-20210731235621633

image-20210731235655727

要留意Scoping

base的同名函数被继承类里面的函数遮住了,所以其实调用不到他

image-20210731235738390

函数default参数不要乱搞

比如如下这个是有问题

image-20210731235935122

ctor,dtor里面调用虚函数是不好的

image-20210801000026592

image-20210801000044916

casting是不好滴

Powered by Jekyll and Theme by solid

本站总访问量