笔记时间:2017-10-09 ~ 2017-10-23 来源:网易云课堂 / Boolan / GeekBand
授课老师:侯捷
说明:结合C++面向对象高级编程(上)视频课程和《C++ Primer中文版》(第5版)记录知识点。
第一课 C++编程简介
目标:
培养正规大气的编程习惯;
以良好的方式编写C++ class(Object Based基于对象)class without pointer members / class with pointer members;
学习Classes之间的关系(Object Oriented面向对象):继承(inheritance);复合(composition);委托(delegation)
推荐书目:《C++ Primer》(第五版)、《The C++ Programming Language》(Fourth Edition)、《Effective C++》、《THe C++ Standard Library》、《STL源码剖析》
C与C++,关于数据和函数 C++,带指针与不带指针的类(类的两个经典分类)Objective Based:面对的是单一class的设计;Objective Oriented:面对的是多重classes的设计,classes和classes之间的关系。
第二课 头文件与类的声明
C++ 代码基本形式
文件扩展名不一定是.h或.cpp,也可能是.hpp或其他甚至无扩展名(与编译器平台有关)
Output,C++ vs.C头文件(Header)中的防卫式声明:
(头文件complex.h)
#ifndef __COMPLEX__
#define __COMPLEX__
……
#endif
(主程序complex-test.h)
#include "complex.h"
complex-test.h头文件的布局:
头文件的布局 class的声明(declaration){
complex c1(2,1);
complex c2;
}
class template(模板)简介inline(内联)函数
不是所有写的inline函数编译器都能做成inline
函数若在class body内定义完成,便自动成为inline候选人
inline函数access level(访问级别):
“public” “private” (“protected”例子中不涉及)
public、private段落可任意交错出现。不一定要集中写。
第三课 构造函数
构造函数构造函数名与类名相同;
无需返回类型,因为构造函数是用来创建对象;
构造函数可以有很多个-overloading(重载);
重载函数(real())函数重载:同一作用域内的几个函数名字相同但形参列表不同。
调用这些函数时,编译器会根据传递的实参类型推断想要的是哪个函数。
main函数不能重载。
上例中,第一个complex有默认实参,第二个complex无类型,编译器不知道调用哪一个,有冲突。
构造函数放在private中。singleton设计模式构造函数放在private里,不可在外部调用。
第四课 参数传递与返回值
const member functions(常量成员函数)
参数传递:pass by value vs. pass by reference
尽量不要传value,C中传指针。
C++中可传引用。
const的引用
把引用绑定到const对象上。
友元:自由取得friend的private成员。相同class的各个objects互为友元。
相同class的各个objects互为友元第五课 操作符重载与临时对象
头文件布局(本课关注2的部分)操作符重载-成员函数:this
二元操作符:+=
操作符重载-成员函数成员函数带隐含参数this(调用者)。上例中c2为this。
return by reference 语法分析连串使用时若函数设为void,则c2无法向c3传递。
成员函数定义操作符重载-非成员函数:无this
非成员函数示例temp object(临时对象) - typename();
临时对象及其语法typename()用法上相当于int();
上例中complex()使用默认参数。
第六课 复习Complex类的实现过程
复演Complex类的代码编写中思维的流程。
网友评论