孙鑫VC第二课学习笔记

    技术2022-05-11  55

    孙鑫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

     

     


    最新回复(0)