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); 


类文件中,或头文件中,可以是类成员函数,有可能是全域函数。

也就是说,任何一个函数,可以作为成员函数,也可以写成全局函数

 

假设你是编译器,你是如何看待这些程序指令和操作符的。


0 0
原创粉丝点击