C++ 面向对象高级开发(侯捷)
C++ 面向对象高级开发(侯捷)
系统性的学习c++,笔记主要是听侯捷老师课做的
C++ 编程简介
C++ 演化
书籍推荐:
《effective C++》
《stl 源码剖析》
C vs C++ 关于数据和函数
c 通过 type(built-in,struct)创建出变量
C++ 通过 class,struct(包含成员和函数)创建出对象
类的经典分类:带指针(复数)和不带指针(string)
object based vs. object oriented
Object based:面对单一 class 的设计
Object Oriented:面对多重 classes 的设计,类之间的关系。
C++ 程序的代码基本形式
.h (“”)+ .cpp + .h(标准库,<>)
c 和 c++ 的输出
cout 和 printf
头文件中的 guard 声明
第一次引用才定义,定义过则不过重复引用
#ifndef __header_name__
#define __header_name__#endif
头文件的布局
#ifndef __header_name__
#define __header_name__1.前置声明
class ostream;
class complex;2.类-声明
class complex
{}3.类-定义
complex::function..
#endif
class 的声明(declaration)
class complex //class head
{//class body
}
模板(template)简介
template
构造函数
inline(内联)函数
inline函数在 class body 内定义完成
特性:运行较快。函数体简单
(最终由编译器决定是否为内联)
(现在编译器自动进行内联优化)
access level 访问级别
public 公开 函数看情况
private 私密 数据成员
protect 保护
使用区别
构造函数 constructor
名称同类名,不需要返回值类型。
构造函数的特别语法 初始化列表
两个阶段:初始化、赋值
简单的差别:赋值过程不一样,能提高效率
不带指针的类多半不用写析构函数
构造函数可以有很多个 (重载)
重载在编译器的角度来看
编译器编译后形成两个名称的函数
参数传递与返回值
设计模式: singleton 单例 类
构造函数放在 private 里 不允许外界创建对象
const member functions 常量成员函数
在函数后加 const --> 拿数据而不改变数据内容
参数传递:pass by value(形参) vs. pass by reference(to const)
值传递、指针传递、引用传递
引用底层实现是指针常量
引用 & 在底层相当于传递指针一样快。
(侯捷老师:良好习惯:最好传引用)
如果不想修改原引用值
使用 const name&
参数一字节 / 两字节:可以形参
返回值传递:return by value vs. return by reference(to const)
返回值 如果可以 --> 使用 引用传递
friend(友元)
友元函数可以自由取得 friend 的 private 数据成员
友元函数是外界函数,并非成员函数,但是权限相同,都可以访问私有数据成员
相同 class 的各个 objects 互为 friends(友元)
class body 外的各种定义(definitions)
什么情况下可以返回引用?
什么情况下可以 return by reference
- 一个函数运算结果的存放位置,如果是新开辟的 local 变量,则不可以使用引用。
- 运算结果存在位置在函数结束后不会释放(也就是原来就有的位置),则可以使用引用传递
操作符重载与临时对象
操作符重载 - 1 operator overload 成员函数 this
编译器如何看待操作符重载?
任何一个成员函数都有一个隐藏参数,this,this是指针,指向调用的对象
重载函数可以是成员函数或非成员函数
<< 只能写成非成员函数
传递者无需知道接收者是以 reference 形式接收
非成员函数符号重载
临时对象 typename();
函数内部创建临时对象,离开函数就被销毁,返回不能是引用
–> return by value
类名 typename(),–> 创建一个临时对象 --> 类似于 int() 强制类型转换?
注意点
- 考虑该不该加 const
- 传递 是否用引用
- 返回是否用引用
- 数据放在 private
- 函数 位置
复习 complex 类的实现过程
考虑函数是否加 const
C++ 面向对象高级开发(侯捷)相关推荐
- 侯捷-C++面向对象高级开发(操作符重载与临时对象)
侯捷-C++面向对象高级开发(操作符重载与临时对象) 1.操作符重载与临时对象 任何成员函数有一个隐藏的this pointer指向,指向调用者. 传递者无需知道接收者是以什么形式接收 就比如下面方框 ...
- 侯捷-C++面向对象高级开发(头文件与类的声明,构造函数,参数传递与返回值)
侯捷-C++面向对象高级开发 1.头文件与类的声明 Object Based:面对的是单一的class的设计 Object Oriented:面对的是多重classes的设计,classes和clas ...
- 侯捷-C++面向对象高级开发(三大函数:拷贝构造,拷贝赋值,析构)
侯捷-C++面向对象高级开发(三大函数:拷贝构造,拷贝赋值,析构) 三大函数:拷贝构造,拷贝赋值,析构 第一个是拷贝构造,第二个是拷贝赋值 编译器有一套默认的东西实现这俩东西,可用到complex的实 ...
- 173-C++面向对象高级开发-上(侯捷)
1.c++编程简介 类中带有指针和类中不带有指针: 2.头文件与类的声明 c++将数据和函数包在一起. 经典的class分类,带指针和不带指针的,具有代表性的就是我们写的 两个案例: 复数案例和字符案 ...
- 侯捷 C++面向对象高级开发(下)笔记整理
C++面向对象高级开发(下) 一.导读 (1)泛型编程和面向对象编程分属不同的思维, (2)由继承关系所形成的对象模型,包含this指针,vptr指针,vtbl虚表,虚机制,以及虚函数造成的多态. 二 ...
- 【侯捷面向对象高级开发】第一部分:基于对象 Object Based
第一部分:基于对象 Object Based 以良好的方式编写C++ class class without pointer members (Example Complex) class with ...
- C++面向对象高级开发(侯捷)——堆、栈与内存管理
stack(栈),heap(堆) Stack:是存在于某作用域(scope)的一个内存空间(memory space).例如当你调用函数,函数本身即会形成一个stack用来放置它所接收的参数,返回地址 ...
- 第一讲 防御式编程—————面向对象高级开发
1 防御式编程 例如在定义头文件时,都使用 #ifndef #define //... #endif 为的就是防止头文件被重复包含.
- 侯捷C++视频资源全集 | 百度网盘下载
之前给群里的小伙伴推荐了侯捷老师, 结果他学着学着发现b站侯捷老师的视频都被下掉了. 让我想起了我当年学c++的时候在b站看候捷老师视频的那些日子,每多看一点,就会多一点恍然大悟的感觉哈哈. 辛亏我的 ...
- 侯捷 C++系列课程视频 | 侯捷 C++ STL 视频
侯捷C++课程视频课程一直都被看过的同学广为推荐,今天晚上发现 B 站关于侯捷老师的 C++ 课程视频几乎全部被下架了. 所以在网上找了下资源,找到了一套还算比较齐全的. 包含了 : 侯捷C++ 标准 ...
最新文章
- UITableView 添加长按手势UILongPressGestureRecognizer
- LESS 的 operation 是 特性
- python实现简单的api接口-Python 实现接口测试的简单实例
- early z optimization
- 互联网金融产品做第三方支付平台托管需要注意什么?
- FPGA模拟串口发送功能的Verilog代码
- 工业机器人码垛教学实施_工业码垛机器人存在问题与解决对策
- [html] 浏览器内多个标签页之间的通信方式有哪些?
- kryoserializer java_使用Kryo序列化任意Java对象(获取IllegalAccess...
- java数据存在ie中_[Java教程]解决在IE中获取数据的缓存问题,运行环境为node.js
- adb device offline 解决办法
- Python3 类(2)
- Windows10中安装VMware Workstation Pro 15.x与使用Ubuntu 20.04 LTS
- 使用SAXReader所需jar包
- dx逆向建模步骤_什么是3D打印?游戏建模具体是什么的?哪个更有发展
- 蓝牙耳机哪款好用?这些选购小技巧帮你选到更适合你的蓝牙耳机!
- 行人重识别的代码复现
- 程序猿生存指南-56 前路漫漫
- 计算机应用池在哪,机动车号牌发放将全国统一 号池号码全部由计算机随机投放、自动增补...
- 从Map、JSONObject取不存在键值对时的异常情况
热门文章
- ubuntu邮件客户端_在Ubuntu中将Gmail设置为默认邮件客户端
- DevOps的技术和工具有哪些?
- android:layout_weight权重与warp_content配合使用
- 交换机之三层交换原理
- 锂电池常规认证-各国认证大全
- Siemens配置许可证服务器,OPC 服务器 配置
- 34604-52-9,Ms-PEG3-Ms甲磺酸基是良好的离去基,也可用作伯醇的保护基
- 搭建个人博客【搭建Hexo+Fluid博客并部署到GitHub/云服务器(阿里云/腾讯云)】
- 安装和使用Windows XP系统故障恢复控制台
- javascript学习网站