C++面向对象高级编程笔记01--GeekBand
来源:互联网 发布:冒泡排序法c语言讲解 编辑:程序博客网 时间:2024/06/05 11:57
首先要给侯捷老师手动点赞,讲课风格朴素而深刻,听课也是每次都有更多的体会。
这个是第一周视频的笔记,主要是如何构建c++的类,以complex为例讲解了不带指针的成员的写法,还有一些具体的知识点。
目标:
培养正规、大气的编程习惯
class的经典分类,带指针和不带指针
class without pointer members —— Complex
class with pointer member —— String
c++演化
c++98(1.0)
c++03(小版本)
c++11(2.0)
c++14(小版本)
目前大部分都是用98版本
查看编译器兼容的c++版本,可以查看__cplusplus宏。
c++包括c++语言和c++标准库
侯捷老师传达的思想,目前的语言,标准库越来越重要。
C vs c++, 数据和函数
C,由于缺少某些关键字,变量都是全局的,函数都可以访问;
而c++,class和struct,对象
complex和string的区别,string对象中只保存指针,指针指向的内存需要额外申请。
函数用来处理数据
Header(头文件)中防卫式声明:
如:
complex.h
#ifndef __COMPLEX__
#define __COMPLEX__
………
#endif
防止重复定义(重复引用头文件)
//下面是如何构建一个类
编写complex的过程:
class complex { // class header
// class body
};
内联函数(inline)
只是对编译器的一种建议,替代c语言中的宏
(详细查一下)
access level(访问级别)
public, private, protected
一般数据放在private区,对外暴露的方法放在public区。
构造函数
创建对象时,会自动地调用构造函数。
如下面几种形式:
complex c1(2, 1);
complex c2;
complex* p = new complex(3);
构造函数,可以用默认实参数,
如complex(double r=0, double i=0);
函数默认值,并不是只有构造函数才有,其他的普通函数也有这个特性。
Initialization list,构造函数有的特性,初始化。用这种特性的简单原因是,设初值有两个阶段,第一阶段在初值列中,是真正的初始化,效率较高;第二阶段在函数体的赋值。
如果要申明一个数组,可以使用 complex* array = new complex[10];
不带指针的一般不用写析构函数。
操作符重载operator
操作符重载可以用于成员函数和非成员函数。
编译器如何看待操作符,如果是作用于两个操作数的操作符,如c1 +=c2,操作符都作用在左边操作数对象,
作用于成员函数时,会隐含一个this指针。
作用于非成员函数时,写法如下
inline complex
operator + (const complex& x, constcomplex& y) { }
跟成员函数的重载的区别,是成员函数的重载会有一个this pointer(所有成员函数都隐含这个this指针),而全局函数没有。
特殊情况:
<< 和 >>操作符,只能写全局函数的形式,而不能写成员函数的形式。原因是,假设你是编译器,看到这个操作符,如果是成员函数,则这个操作符属于左边对象的,即成员函数所在的类的对象,而实际上是cout。
ostream&
operator << (ostream& os, constcomplex& c)
os不能是const,因为输出时,会不断的改变os对象的状态。
Temp object, 临时对象
一种语法:typename(), 用于创建临时对象,不用命名,下一行就结束。
如,int(2);
类文件中,或头文件中,可以是类成员函数,有可能是全域函数。
也就是说,任何一个函数,可以作为成员函数,也可以写成全局函数。
假设你是编译器,你是如何看待这些程序指令和操作符的。
- C++面向对象高级编程笔记01--GeekBand
- C++面向对象高级编程笔记02--GeekBand
- C++面向对象高级编程笔记03--GeekBand
- 《GeekBand》c++面向对象高级编程01
- [GeekBand]C++面向对象高级编程(上)- 第一周笔记
- C++面向对象高级编程(上)-Geekband
- 《GeekBand》c++面向对象高级编程02
- 《GeekBand》c++面向对象高级编程03
- 《GeekBand》c++面向对象高级编程04
- Geekband C++面向对象高级编程(上) 第一周笔记 暗影行者
- Geekband C++面向对象高级编程(上) 第二周笔记 暗影行者
- Geekband C++面向对象高级编程(上) 第三周笔记 暗影行者
- Geekband C++面向对象高级编程(下) 第一周笔记 暗影行者
- Geekband C++面向对象高级编程(下) 第二周笔记 暗影行者
- GeekBand C++ 面向对象高级编程(上) 第一周笔记
- GeekBand C++ 面向对象高级编程(上) 第二周笔记
- GeekBand C++ 面向对象高级编程(下) 第三周笔记
- GeekBand C++ 面向对象高级编程(下) 第四周笔记
- html5中链接和分组标签
- 分治法——归并排序
- Kiss you goodbye
- Prim算法
- leetcode:Best Time to Buy and Sell Stock II 【Java】
- C++面向对象高级编程笔记01--GeekBand
- mybatis脱离其他框架,利用main或者junit测试代码
- hihoCoder#1032 : 最长回文子串(manacher算法)
- kidd风的IOS日志之地图与定位
- SQL读书笔记(九) UNION
- jmp_buf的使用,结构定义为数组
- 工厂模式理解
- 自学 java 笔记 day9(继承下)
- java 线程的几种状态