C++ 面向对象高级开发(侯捷)

C++ 面向对象高级开发(侯捷)

系统性的学习c++,笔记主要是听侯捷老师课做的

C++ 编程简介

C++ 演化

书籍推荐:
《effective C++》

《stl 源码剖析》

C vs C++ 关于数据和函数

c 通过 type(built-in,struct)创建出变量
C++ 通过 class,struct(包含成员和函数)创建出对象

C++ 面向对象高级开发(侯捷)_第1张图片

类的经典分类:带指针(复数)和不带指针(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

C++ 面向对象高级开发(侯捷)_第2张图片

构造函数

inline(内联)函数

inline函数在 class body 内定义完成
特性:运行较快。函数体简单
(最终由编译器决定是否为内联)
(现在编译器自动进行内联优化)

access level 访问级别

public 公开 函数看情况
private 私密 数据成员
protect 保护

使用区别

C++ 面向对象高级开发(侯捷)_第3张图片

构造函数 constructor

名称同类名,不需要返回值类型。

C++ 面向对象高级开发(侯捷)_第4张图片

构造函数的特别语法 初始化列表

两个阶段:初始化、赋值

简单的差别:赋值过程不一样,能提高效率

不带指针的类多半不用写析构函数

C++ 面向对象高级开发(侯捷)_第5张图片

构造函数可以有很多个 (重载)

重载在编译器的角度来看

编译器编译后形成两个名称的函数

参数传递与返回值

设计模式: singleton 单例 类
构造函数放在 private 里 不允许外界创建对象

C++ 面向对象高级开发(侯捷)_第6张图片

const member functions 常量成员函数

在函数后加 const --> 拿数据而不改变数据内容

C++ 面向对象高级开发(侯捷)_第7张图片

参数传递:pass by value(形参) vs. pass by reference(to const)

值传递、指针传递、引用传递

引用底层实现是指针常量

引用 & 在底层相当于传递指针一样快。
(侯捷老师:良好习惯:最好传引用)
如果不想修改原引用值
使用 const name&

参数一字节 / 两字节:可以形参

返回值传递:return by value vs. return by reference(to const)

返回值 如果可以 --> 使用 引用传递

image-20220427203509047

friend(友元)

友元函数可以自由取得 friend 的 private 数据成员

友元函数是外界函数,并非成员函数,但是权限相同,都可以访问私有数据成员

C++ 面向对象高级开发(侯捷)_第8张图片

相同 class 的各个 objects 互为 friends(友元)

C++ 面向对象高级开发(侯捷)_第9张图片

class body 外的各种定义(definitions)

什么情况下可以返回引用?

什么情况下可以 return by reference

  • 一个函数运算结果的存放位置,如果是新开辟的 local 变量,则不可以使用引用。
  • 运算结果存在位置在函数结束后不会释放(也就是原来就有的位置),则可以使用引用传递

操作符重载与临时对象

操作符重载 - 1 operator overload 成员函数 this

编译器如何看待操作符重载?

任何一个成员函数都有一个隐藏参数,this,this是指针,指向调用的对象

C++ 面向对象高级开发(侯捷)_第10张图片

重载函数可以是成员函数或非成员函数
<< 只能写成非成员函数
传递者无需知道接收者是以 reference 形式接收

C++ 面向对象高级开发(侯捷)_第11张图片

非成员函数符号重载

C++ 面向对象高级开发(侯捷)_第12张图片

临时对象 typename();

函数内部创建临时对象,离开函数就被销毁,返回不能是引用

C++ 面向对象高级开发(侯捷)_第13张图片

–> return by value

类名 typename(),–> 创建一个临时对象 --> 类似于 int() 强制类型转换?

注意点

  • 考虑该不该加 const
  • 传递 是否用引用
  • 返回是否用引用
  • 数据放在 private
  • 函数 位置

复习 complex 类的实现过程

考虑函数是否加 const

你可能感兴趣的:(c++学习,侯捷,c++面对对象高级开发)