| |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
-> C++知识库 -> 侯捷c++课程笔记 (面向对象高级编程3) -> 正文阅读 |
|
[C++知识库]侯捷c++课程笔记 (面向对象高级编程3) |
静态函数没有this指针,静态函数只能存取静态变量。 调用静态函数的方法有两种: 1是通过对象调用 2如果还没有创建对象,可以通过类名来调用? (类名::静态函数) singleton(只能存在一个对象a ,不能再创造对象):如下图用静态来实现 ? ?cout为什么所有类型都可以输出?cout的本质: ? 关键字namespace:如下图 namespace + 名字? ?(std是标准库) 左一为全部打开,左二为只打开了cout,即用到cout的时候前面才不用声明std::,左三为全部都用全名。 ? 复合与继承: 复合(has a):类里面有一个(或者n个)其他类的对象。 下图中queue的功能都是由deque实现的,此时queue就是Adapter,即由deque改造的 ? 次序:(编译器默认自己执行的) ? ?委托:两个类之间用指针相连,与复合的区别是复合是两个类一起出现的,一个类的功能依赖另一个类实现,有了外部就有内部。而委托则是两个不是同步的,比如下面的string,等到需要用到rep的时候可能才去创建右边的对象。 下面这种写法为pimpl(很有名,因为很灵活,右边怎么设置都不影响左边用户接口):左边public只是提供对外的接口,字符串本身该怎么设计全在右边实现。同时设计也实现了共享,即如果创建了三个字符串(创建一个拷贝两个)会共同指向一个右边创建的rep指针,节省了内存。要改a的内容的时候右边会复制一个指针,bc共享。 ? 继承(is a):一般都是public继承 ? 基类的析构最好是virtual ?? ?虚函数:(重新定义即重写,但不是重载)? ?pure vitual是纯虚函数,意思是在子类里一定要去重写它,不然就是0. ? ? ?如下图: 父类的关键动作延缓到子类去实现,这个关键动作就叫做Template Method,23个设计模式之一。这就引出了应用程序框架的概念(Application framework),在应用程序框架中就可以大量使用Template Method。 子类对象调用的父类函数中的Serialize函数为什么调回的是子类的定义?这是因为函数调用里的this指针传进了父类,而父类中是用this指针指向的Serialize函数,所以就会调用子类的虚函数表中的虚函数。 下图是上图的详细代码 ? 下面的一种设计模式可以使得应用程序拷贝调用未来需要添加的类的对象。只需要未来添加类的时候在内部创建一个静态的自己的类,构造函数设置为私有,这样在创建自己(原型)的时候会调用私有的构造函数,在构造函数里设置addprototype(),把自己this指针传上去,这样框架就可以通过类的原型(下图是image)调用clone()做出一个副本 ?+public? ?-private? #protected 框架: ?子类:这里的protected里的LandSatImage(int)设计非常巧妙,因为在克隆原型的时候势必会调用构造函数,而构造函数又会调用addprototype()再传一次this指针,程序肯定是不想这么做的,所以加了有参构造,避免再次构造,这里的LandSatImage(int)可以放在私有区域或者保护区域,只要不是公共区域就行,因为这些东西不打算公开。 ? |
|
C++知识库 最新文章 |
【C++】友元、嵌套类、异常、RTTI、类型转换 |
通讯录的思路与实现(C语言) |
C++PrimerPlus 第七章 函数-C++的编程模块( |
Problem C: 算法9-9~9-12:平衡二叉树的基本 |
MSVC C++ UTF-8编程 |
C++进阶 多态原理 |
简单string类c++实现 |
我的年度总结 |
【C语言】以深厚地基筑伟岸高楼-基础篇(六 |
c语言常见错误合集 |
|
上一篇文章 下一篇文章 查看所有文章 |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 | -2024/11/24 9:49:23- |
|
网站联系: qq:121756557 email:121756557@qq.com IT数码 |