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++ 面向对象高级开发(侯捷)相关推荐

  1. 侯捷-C++面向对象高级开发(操作符重载与临时对象)

    侯捷-C++面向对象高级开发(操作符重载与临时对象) 1.操作符重载与临时对象 任何成员函数有一个隐藏的this pointer指向,指向调用者. 传递者无需知道接收者是以什么形式接收 就比如下面方框 ...

  2. 侯捷-C++面向对象高级开发(头文件与类的声明,构造函数,参数传递与返回值)

    侯捷-C++面向对象高级开发 1.头文件与类的声明 Object Based:面对的是单一的class的设计 Object Oriented:面对的是多重classes的设计,classes和clas ...

  3. 侯捷-C++面向对象高级开发(三大函数:拷贝构造,拷贝赋值,析构)

    侯捷-C++面向对象高级开发(三大函数:拷贝构造,拷贝赋值,析构) 三大函数:拷贝构造,拷贝赋值,析构 第一个是拷贝构造,第二个是拷贝赋值 编译器有一套默认的东西实现这俩东西,可用到complex的实 ...

  4. 173-C++面向对象高级开发-上(侯捷)

    1.c++编程简介 类中带有指针和类中不带有指针: 2.头文件与类的声明 c++将数据和函数包在一起. 经典的class分类,带指针和不带指针的,具有代表性的就是我们写的 两个案例: 复数案例和字符案 ...

  5. 侯捷 C++面向对象高级开发(下)笔记整理

    C++面向对象高级开发(下) 一.导读 (1)泛型编程和面向对象编程分属不同的思维, (2)由继承关系所形成的对象模型,包含this指针,vptr指针,vtbl虚表,虚机制,以及虚函数造成的多态. 二 ...

  6. 【侯捷面向对象高级开发】第一部分:基于对象 Object Based

    第一部分:基于对象 Object Based 以良好的方式编写C++ class class without pointer members (Example Complex) class with ...

  7. C++面向对象高级开发(侯捷)——堆、栈与内存管理

    stack(栈),heap(堆) Stack:是存在于某作用域(scope)的一个内存空间(memory space).例如当你调用函数,函数本身即会形成一个stack用来放置它所接收的参数,返回地址 ...

  8. 第一讲 防御式编程—————面向对象高级开发

    1 防御式编程 例如在定义头文件时,都使用 #ifndef #define //... #endif 为的就是防止头文件被重复包含.

  9. 侯捷C++视频资源全集 | 百度网盘下载

    之前给群里的小伙伴推荐了侯捷老师, 结果他学着学着发现b站侯捷老师的视频都被下掉了. 让我想起了我当年学c++的时候在b站看候捷老师视频的那些日子,每多看一点,就会多一点恍然大悟的感觉哈哈. 辛亏我的 ...

  10. 侯捷 C++系列课程视频 | 侯捷 C++ STL 视频

    侯捷C++课程视频课程一直都被看过的同学广为推荐,今天晚上发现 B 站关于侯捷老师的 C++ 课程视频几乎全部被下架了. 所以在网上找了下资源,找到了一套还算比较齐全的. 包含了 : 侯捷C++ 标准 ...

最新文章

  1. UITableView 添加长按手势UILongPressGestureRecognizer
  2. LESS 的 operation 是 特性
  3. python实现简单的api接口-Python 实现接口测试的简单实例
  4. early z optimization
  5. 互联网金融产品做第三方支付平台托管需要注意什么?
  6. FPGA模拟串口发送功能的Verilog代码
  7. 工业机器人码垛教学实施_工业码垛机器人存在问题与解决对策
  8. [html] 浏览器内多个标签页之间的通信方式有哪些?
  9. kryoserializer java_使用Kryo序列化任意Java对象(获取IllegalAccess...
  10. java数据存在ie中_[Java教程]解决在IE中获取数据的缓存问题,运行环境为node.js
  11. adb device offline 解决办法
  12. Python3 类(2)
  13. Windows10中安装VMware Workstation Pro 15.x与使用Ubuntu 20.04 LTS
  14. 使用SAXReader所需jar包
  15. dx逆向建模步骤_什么是3D打印?游戏建模具体是什么的?哪个更有发展
  16. 蓝牙耳机哪款好用?这些选购小技巧帮你选到更适合你的蓝牙耳机!
  17. 行人重识别的代码复现
  18. 程序猿生存指南-56 前路漫漫
  19. 计算机应用池在哪,机动车号牌发放将全国统一 号池号码全部由计算机随机投放、自动增补...
  20. 从Map、JSONObject取不存在键值对时的异常情况

热门文章

  1. ubuntu邮件客户端_在Ubuntu中将Gmail设置为默认邮件客户端
  2. DevOps的技术和工具有哪些?
  3. android:layout_weight权重与warp_content配合使用
  4. 交换机之三层交换原理
  5. 锂电池常规认证-各国认证大全
  6. Siemens配置许可证服务器,OPC 服务器 配置
  7. 34604-52-9,Ms-PEG3-Ms甲磺酸基是良好的离去基,也可用作伯醇的保护基
  8. 搭建个人博客【搭建Hexo+Fluid博客并部署到GitHub/云服务器(阿里云/腾讯云)】
  9. 安装和使用Windows XP系统故障恢复控制台
  10. javascript学习网站