1200字范文,内容丰富有趣,写作的好帮手!
1200字范文 > 侯捷C++学习记录-面向对象高级编程上

侯捷C++学习记录-面向对象高级编程上

时间:2024-02-15 00:29:32

相关推荐

侯捷C++学习记录-面向对象高级编程上

目标

培养正规的、大气的编程习惯

以良好的方式编写C++ class 【Object Based(基于对象)】

学习Classes 之间的关系 【Object Oriented(面向对象)】

继承(inheritance)

复合(composition)

委托(delegation)

侯捷C++全套视频链接:/s/19PnDq2VuyonB0USk2ghXVA

提取码:xfr0

–来自百度网盘超级会员V1的分享

推荐书籍:C++ primer、Effective C++、STL源码剖析

文章目录

1.C++编程简介2.头文件与类声明2.1头文件声明2.2 防卫式声明2.3 类声明2.4 inline内联函数 3. 构造函数3.1构造函数初始化3.2构造函数的重载3.3模板简介 4.参数传递与返回值4.1单例简介4.2 常量成员函数4.3 参数传递 传值/传引用4.4 返回值传递 传值/传引用4.5 友元 5. 操作符重载与临时对象5.1 操作符重载5.2 临时对象 6.复习complex类实现

1.C++编程简介

侯捷C++全套视频链接:/s/19PnDq2VuyonB0USk2ghXVA

提取码:xfr0

–来自百度网盘超级会员V1的分享

推荐书籍:C++ primer、Effective C++、STL源码剖析

2.头文件与类声明

2.1头文件声明

库中自带头文件#include <xxx>自定义头文件#include "xxx"

2.2 防卫式声明

1.ifndef表示在文件内第一次没有定义时候,进行声明定义

2.在一个大的软件工程里面,可能会有多个文件同时包含一个头文件,当这些文件编译链接成一个可执行文件上时,就会出现大量“重定义”错误。

3.在头文件中使用#define、#ifndef、#ifdef、#endif能避免头文件重定义。

2.3 类声明

数据尽可能放在private中,函数绝大部分要放在public中

pubilc > protected > private(所有的数据都应该放在 private,打算被外界调用的函数应该是public)

2.4 inline内联函数

inline关键字用来定义一个类的内联函数,解决一些频繁调用的小函数大量消耗栈空间(栈内存)的问题。函数定义在构造函数body内部,自动声明为inline,即类中的成员函数缺省都是内联的,但能否内联要看编译器,在构造函数外部声明内联函数要加inline关键字

限制:inline只适合函数体内代码简单的函数,不能包含复杂的结构控制语句例如while、switch,并且不能内联递归函数。

inline函数仅仅是一个对编译器的建议,所以最后能否真正内联,看编译器的意思,它如果认为函数不复杂,能在调用点展开,就会真正内联,并不是说声明了内联就会内联,声明内联只是一个建议而已。

3. 构造函数

3.1构造函数初始化

构造函数名与类名相同,可以有参数,参数也可以有默认值,没有返回类型,用于创建对象

构造函数中,成员变量初始化中使用":"函数方式列表初始化性能比直接在构造函数中赋值要快,建议使用这种方式。

public:complex (double r = 0, double i = 0): re (r), im (i) //将构造函数的参数赋值给私有成员变量 初始化的过程中就赋值{ }//相当于public:complex (double r = 0, double i = 0){re = rim = i}

不带指针的类大多不用写析构函数(内存泄漏)

3.2构造函数的重载

可以有很多重名的构造函数,即构造函数重载重载real函数时,其实编译器会编译成两个函数,虽然同名但不重载黄色标注的构造函数定义将出现问题,与上面的构造函数存在冲突,在无参初始化该类对象时,因为第一个构造函数已经有参数默认初始化列表了,定义该类对象时可以不加入参数,这就产生了冲突。

3.3模板简介

先不声明数据类型,调用的时候再全部替换,提高代码的复用性

4.参数传递与返回值

4.1单例简介

不允许被外界调用类,当需要调用的时候,用类里面声明的函数

采用关键字static,将构造函数ctor放在private中:设计模式-单例

4.2 常量成员函数

const关键字:成员函数中没有改变成员变量的操作,如get函数,建议在该方法声明处加入const关键字初始化类时,如果加入了const关键字,则该类不能被修改,只能读取属性,相应的,所调用的成员方法在定义时应该加上const关键字

4.3 参数传递 传值/传引用

函数参数传递,如果不需要改变参数值,建议使用 const + 引用 减小开销,速度快尽量选择传引用作为函数参数

构造函数初始化的特殊写法

能加const的地方 就需要加

数据尽可能放在private中,函数绝大部分要放在public中

参数尽量考虑用reference来传(类型 名称&/名称&) 也需要考虑是否加const

返回值尽量考虑用reference来传(名称&)

4.4 返回值传递 传值/传引用

返回值的参数传递也建议尽量传引用

好处:传返回值时,无论是传值还是传引用,返回值只接收引用,即传参时无需关心是传引用还是值

不能传reference的情况:返回值是在函数内部新创建的变量,其引用是该函数的一个指向堆局部变量指针,该变量的地址会在函数调 用完成后销毁,则此时返回值不应使用传地址

对于临时变量也不能返回引用:例如 + 运算符的重载

创建临时对象:typename( xxx )->int(i)

4.5 友元

友元函数可以自由取得private成员,不声明为friend的话,也可以通过函数来取得私有变量

相同类的各个实例对象互为友元,可以通过彼此的内部方法调用传入参数的内部私有成员变量。

5. 操作符重载与临时对象

5.1 操作符重载

任何一个成员函数都有一个隐藏的this指针,不需要显式声明,但是可以使用,指向调用者,C2是调用者如上图所所示,在运算符重载过程中隐藏了this指针,该指针编译器会处理,使用者不能显式声明操作符重载时,返回值不能是void,单个操作时不会报错,但连续操作是由于没有返回值会出现问题

如果使用point指针,传递者必须知道是用point指针类型

5.2 临时对象

没有开辟新的对象让虚数和实数相加,直接用临时对象返回,不能用引用传递

6.复习complex类实现

具体可看源码

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。