| |
|
开发:
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++ 面向对象高级开发】课程笔记以及个人注释(附带课程资源) -> 正文阅读 |
|
[C++知识库]【侯捷 C++ 面向对象高级开发】课程笔记以及个人注释(附带课程资源) |
前言华南理工大学读本科的时候,大一大二入门了C++,但是始终不深。现在继续在华工深造,希望继续深入C++。 今天我正式开始继续好好学习C++的历程。将在CSDN持续更新。 当前安排
兼顾好实验室项目以及课程的同时,尽量抽时间完成。加油。 本篇内容本篇记录的是【侯捷 - C++面向对象高级开发】入门课程。 本课程一共是上下两部分,上部分主要讲基础的OOP思想以及方法,下部分是深入的解析。总课时估计是十来小时,放在四五天学习会挺舒服的。 侯捷视频资源源自公众号:编程指北 链接: https://pan.baidu.com/s/19REVrk-_3lpQu_fUmRBRUw 密码: 7iup 或有条件也可以直接访问Youtube资源。 篇2 头文件与类的声明为什么面向对象将数据和函数方法绑定在一起,方便(方法整合到了一起)、安全且隐私(数据不被观察)。 Header防卫式声明多个文件引入头部文件的时候,避免重复定义。 攥写方法如下: complex.h
Header布局前置声明、类声明、类定义。
类模板希望类中某个属性不直接绑定内置类型,因此直接把类型抽象成一个模板。
篇3 构造函数inline 内联函数如果函数在class内定义完成,则会成为inline函数(但要求函数简单,编译器不拒绝)。 但某些复杂函数无法inline,编译器会拒绝。 access level 访问级别public / private 建议所有的数据都放在private。 构造函数构造函数的通常写法构造函数的函数名称与类一致。无返回值。 另外,不带指针的类通常不需要写析构函数。
支持重载,但是不可以让编译器产生歧义,即入两个函数都可以(等价可以)重载不仅指入参可以不一样,出参也可以不一样。 用作成员set和用作get的函数名可以一致。
Singleton 单例模式把构造函数放在private,就不能被公共创造。
篇4 参数传递与返回值const member functions 常量成员函数定义函数的时候,不希望该函数有修改成员值的权力,就加const限定词。
参数传递:pass by value vs. pass by reference(to const)尽量传ref。 传value是复制了一份数据到栈上。 传ref是直接传引用(引用的地步就是指针,四个字节)。 所以传ref快,而且方便改值(尽管传char可能更小,一个字节,但是没必要这么细,通常来说传ref快)。当然如果希望不被改值,加const关键词。
返回值传递:return by value vs. return by reference(to const)尽量返ref。 friend 友元通常封装数据之后,外部都无法访问数据。**但是友元可以。**事实上友元有点违反封装的设计原理。
相同class的各个objects互为friends相同class的各个objects互为friends。即同类的objects可以互相访问private data。 篇5 操作符重载 operator overloading成员函数版本 含this因此需要在类中写好定义。 使用场景
则实现方式:
这里隐藏了操作符的左操作数,是this,参数列表中不需要显式写出,可以直接使用。 非成员函数版本 不含this二元加法使用场景
则实现方式: 这个绝对不可以返回reference,因为相加的object一定是新建且是local的。因此需要创建临时对象(无名称,只在当前行有用)返回。 一元正负使用场景
实现方法
二元判断是否相等,是否不等使用场景
比较相等比较不等<<重载(std重载)使用场景
实现方案
以上是经典案例1,complex,class without pointer member 以上是经典案例2,string,class with pointer member 篇7 Big Three:拷贝构造、拷贝赋值、析构场景
Big Three类声明**如果成员函数含有指针,必须含有copy ctor和copy op=。*否则如果使用默认的方法,只是潜赋值,会共用同一个底层的char。
constructor和destructor定义
copy ctor(拷贝构造)
copy assignment operator(拷贝赋值函数)
篇8 栈stack、堆heap与内存管理堆栈说明
static local objects的生命周期其生命在作用域结束后仍然存在
global objects的生命周期其生命一直存在,直到程序结束
heap objects的生命周期存在,直到被delete掉。如果不delete则内存泄漏(即没有回收,且没有办法再手动回收)。
new的过程
delete的过程
篇10 类 拓展:模板、函数模板补充1:static全局空间会有一份类中的方法、静态成员变量、静态成员函数。而正常的成员变量会在初始化object的时候创建。
为什么cout可以接受那么多类型去输出cout继承于ostream,标准库团队在ostream实现重载了大量类型的<<操作符。 function template,函数模板使用场景:任意元素的比较大小,使用函数模板
当然如果自己设计的类要调用该函数,一定是需要自己重载<操作符。
namespace 命名空间namespace是一个区域限制,相当于局部空间。可以如下使用:
篇11 组合、委托与继承面向对象的三个重要特性:复合、委托、继承。 Composition 复合, has-a一个类中,包含了另一个类,就叫复合。生命周期同步。 如下,queue类里面包含了Sequence类。
构造与析构的关系假如Container has a Component.
Delegation 委托,Composition by reference一个类,仍然包含另一个类,但是不是通过内存直接包含,而是用一个指针包含。 生命周期不同步。 如下,String类委托了一个StringRep类。
委托可以对外接口一致,String接口永远不变,但是内部实现可以通过修改StringRep改变。 Inheritance 继承,is-a类A是类B,则类A继承类B。这个关系清晰易懂,用显示情况get 构造和析构
继承 with 虚函数 virtual functions虚函数
委托+继承 经典案例经典案例1(设计模式Observer)课程说了一个经典案例,多个Obsever观察同一个数据/文档。每个Observer都有自己对数据的显示方式。 代码如下:
经典案例1(设计模式Composite)尚未感受到有多厉害,截个图把。 经典案例2(设计模式Prototype)父类想创建未来才定义的子类。同样还没感受到,截个图然后教程继续。 承上启下:兼谈对象模型后面是“面向对象程序设计”的续集。会讨论:
即讲述以下技术点 篇2 conversion function,转换函数使用场景:我自定义一个类,表示分数,但是我希望它做加减乘除的时候,自动转为double。
非explicit单实参构造函数 non-explicit-one-argument ctor
我们的使用场景仍然和上面一样,希望 设计模式里面的【代理】,就用到了转换函数。 篇4 指针类 pointer-like classes像指针的类,用起来跟指针一样,但是有更多的机制。 链表的node也是一种pointer-like classes。真挺厉害的。 以下给出node的代码
篇5 仿函数 function-like classes让一个类像函数被调用,只要实现()操作符即可。 小小的类,用作base unit。 篇6 namespace经验谈把区域分隔开。用 篇9 member template,成员模板使用场景:更灵活地构造
同时智能指针也实现了成员模板。 篇10 Specialization,模板特化泛化模板覆盖很广,但是我们有时候需要针对某种类型,执行不同的操作。
篇11 partial specialization,模板偏特化这部分跟python的偏函数挺像的,就是对template泛化模板,偏特化某个模板参数 或者 修改范围。 个数上的偏特化
范围上的偏特化
篇12 template template parameter,模板模板参数使用场景:希望自定义一个模板,嵌套另一个模板进行使用。 这里有点深了,先有个印象然后跳过吧。
篇13 如何确认当前cpp版本
篇14 c++的三个主题:可变参数variadic templates,可变模板使用场景:使某函数接受任何多的参数。
auto让编译器自动推导type。
ranged-base for新的循环方式,像Python一样。
篇15 reference 引用详解特性:
另外,函数的const是否属于函数签名一部分呢?是的。 篇17 关于vptr和vtbl高清 1080P C++面向对象高级编程(侯捷) P30 17 关于vptr和vtbl 只要类中有虚函数,就有vptr,它指向vtbl,表里面放的都是函数指针,指向内存里面的虚函数。 这幅图画得非常非常清晰。 这个也就是实现多态的底层原理。 篇18 动态绑定关于静态绑定和动态绑定静态绑定直接访问内存里编译好的函数内存空间。 动态绑定调用三个条件:
底层勘探假如A是B的父类,B是C的父类。
篇19 谈谈const这里Cpp primer这本书说得贼全,但是很复杂。侯老师说得比较精炼。 当成员函数的const和non-const版本同时存在,
即常量对象无法调用非常量成员函数。 COW: Copy and Write当重载[]操作符的时候,设计两个函数,
后话恭喜完成了【侯捷 C++ 面向对象高级开发】的学习! Cpp是一个庞然大物,不必期待那么快就能学完。 后面我将继续进行侯接课程的学习,持续更新。 欢迎评论交流! |
|
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年12日历 | -2024/12/29 3:00:42- |
|
网站联系: qq:121756557 email:121756557@qq.com IT数码 |
数据统计 |