C++学习第五篇

1、联编

    C代码到可执行程序的过程:

        a.预处理:包含头文件的展开和宏的替换,不检查语法错误

        b.编译:将预处理后的文件编译成汇编代码,检查语法错误。

        c.汇编:将汇编代码转为二进制的文件

        d.链接:链接外部库,生成最终目标文件

    联编:计算机程序内部自身彼此关联的过程。C语言也有联编,发生在编译阶段。

    在编译阶段会进行代码的翻译工作,同时确定被掉函数和提供该函数调用的代码段之间的映射关系。

    联编分为静态联编和动态联编。

    静态联编:C语言中联编都是静态联编。静态联编发生在编译阶段。

    动态联编:动态联编在编译阶段无法确定函数调用和提供该函数调用的代码段之间的映射关系。在程序运行时才能确定彼此关系。

    继承、虚函数

2、虚函数

    使用virtual关键字修饰的类的成员函数就是虚函数。

    通过继承、虚函数实现动态联编,当两个类存在继承关系,并且父类和子类中函数同名、同参、同返回值时且父类中此函数使用virtual关键字声明,此时在编译阶段无法确定函数的调用关系,只能在程序运行时确定。

    虚函数的功能:

    提供父类的指针或引用访问子类成员函数的途径。

    虚函数可以实现动态多态。

    动态多态:

    通过继承、虚函数实现动态联编,当两个类存在继承关系,并且父类和子类中函数同名、同参、同返回值时且父类中此函数使用virtual关键字声明,父类的指针或引用指向不同的子类对象可以有不同结果。

3、纯虚函数

        格式为:virtual 类型 函数名(参数)=0;

        含有纯虚函数的类为抽象类。

        抽象类不允许定义对象。

        如果一个类中含有纯虚函数,这个类一般用于继承使用,作为其他子类的蓝图(模板);

4、虚析构函数

    在析构函数前面加上关键字virtual进行声明,称该析构函数为虚析构函数

    当父类的指针指向的子类的对象在堆区存放时,需要将父类的析构函数声明为virtual虚析构函数,否则无法正确释放空间,会导致内存泄露。

发布了36 篇原创文章 · 获赞 7 · 访问量 7789

猜你喜欢

转载自blog.csdn.net/qq_33301482/article/details/84067772
今日推荐