孙鑫VC第二课学习笔记

来源:互联网 发布:和老师约啪 知乎 编辑:程序博客网 时间:2024/05/03 16:59

孙鑫VC第二课学习笔记

掌握C++

知识点一

 

知识点二

C语言中,结构体Struct中是不能包含函数的,但是在C++中却是可以的。

Struct的成员默认是Public,而Class的成员默认是Private

 

Public表示数据成员能够在类外面被访问。

Private表示数据成员不能够在类外面被访问,只能在类内部访问。

Protected表示子类和父类之间的关系,在类外面也是不能被访问的。

 

知识点三

类和对象的概念:

类是抽象出一些事物共有的属性。

对象是具有具体的属性值的事物。

举例说明:比如说电脑,我们可以定义一个电脑的类,它具有一些基本的属性,比如说电脑有一个主板,一个CPU等。那什么是电脑的对象呢?一台具体的电脑。比如说你买了一台电脑,它的主板的华硕的,CPUIntel的。类本身是抽象,本身不可能消亡,但是对于类是有生命的,一台电脑你用了几年可能就坏了。

类的实例通常情况下就等于类的对象。

 

知识点四

构造函数与类名相同。

一.构造函数最重要的作用是创建对象本身。

二.C++规定,每个类必须有一个构造函数,没有构造函数,就不能创建任何对象。

三.C++又规定,如果一个类没有提供任何的构造函数,则C++提供一个默认的构造函数(由C++编译器提供),这个默认的构造函数是一个不带参数的构造函数,它只负责创建对象,而不做任何的初始化工作。

四.只要一个类定义了一个构造函数,不管这个构造函数是否是带参数的构造函数,C++就不再提供默认的构造函数。也就是说,如果一个类定义了一个带参数的构造函数,还想要无参数的构造函数,则必须要自己定义了。

 

析构函数

一.当一个对象生命周期结束时,其所占有的内存空间就要被收回,这个工作就是由析构函

数来完成。

二.析构函数是“反向”的构造函数,析构函数不允许有返回值,更重要的是析构函数不允

许带参数,并且一个类只能有一个析构函数。

三.析构函数的作用正好与构造函数相反,对象超出其作用范围,对应的内存空间被系统收

回或被程序delete删除时,析构函数被调用。

五.根据析构函数的这种特点,我们可以在构造函数中初始化对象的某些成员变量,给其分

配内存空间(堆内存),在析构函数中释放对象运行期间所申请的资源。

 

重载构成的条件:函数的参数类型、参数个数不同,才能构成函数的重载。

第一种情况:void output()

                     Int  output()

第二种情况:void output(int a, int b=5)

                     Void output(int a)

第一种情况是不能构成函数的重载,对于第二种情况,调用output(a)时也是不可以的。

知识点五

知识点六

知识点七

如果A继承了B,那么构造函数和析构函数之间调用顺序。

B()->A()->~A()->~B()

 

知识点八

函数覆盖是发生在父类和子类之间的。当父类和子类具有相同的函数时,我们实例化子类时,调用的是子类的函数。

 

知识点九

一个数据类型的转换,比如说一个charint进行转换,作为一个类型转换,那么他们之间能不能进行类型转换主要看内存模型是否匹配。比如将int的值付给char,只有一个字节的内容能够放到char,另外3个字节被截断,就会丢失精度,但是反过来,肯定是可以的。

 

一个子类的内存布局:

父类对象的内存

子类继承的部分

 

知识点十

多态性:当C++编译器在编译的时候,发现父类的某个函数是虚函数,这个时候C++会采用迟绑定的技术,在运行时,依据对象的类型来确认调用的哪个函数,这种能力就是C++的多态性。

 

纯虚函数:virtual void XXX() = 0;含有纯虚函数的类叫做抽象类,是不能被实例化的,如果子类继承了抽象类,但是没有实现纯虚函数,也是抽象类,不能被实例化。

知识点十一

指针变量本身需要内存空间,而引用不需要另外的内存空间,只是变量的别名。

知识点十二

每个CPP文件单独编译,头文件不参与编译,最后由链接器将各个obj文件和C++的标准库函数标准类库link成可执行文件。

 

如何防止头文件重复引用

#ifndef _XXX_H_

#define _XXX_H_

#endif

 

 

原创粉丝点击