摘要: 答:在实现多态时,当用基类操作派生类,在析构时防止只析构基类而不析构派生类的状况发生。 代码说明如下 第一段代码: 1 #include<iostream> 2 using namespace std; 3 4 class ClxBase 5 {public: 6 ClxBase() {} 7 ~C 阅读全文
posted @ 2020-05-09 17:39 卖雨伞的小男孩 阅读(797) 评论(0) 推荐(0) 编辑
摘要: 1、首先我们需要一些宏: //********************************************// Interface.h//主要是宏定义一些关键词,可以形成接口类//********************************************#ifndef IN 阅读全文
posted @ 2020-05-09 17:23 卖雨伞的小男孩 阅读(1495) 评论(0) 推荐(0) 编辑
摘要: 1、纯虚拟函数 强制子类实现接口 C++中包含纯虚函数的类,被称为是“抽象类”。抽象类不能使用new出对象,只有实现了这个纯虚函数的子类才能new出对象。 C++中的纯虚函数更像是“只提供申明,没有实现”,是对子类的约束,是“接口继承”。 C++中的纯虚函数也是一种“运行时多态”。 如下面的类包含纯 阅读全文
posted @ 2020-05-09 17:21 卖雨伞的小男孩 阅读(552) 评论(0) 推荐(0) 编辑
摘要: 1、修饰变量,即常量,初始化后不能改变 2、修饰指针,表示常指针 3、修饰指针指向的变量,表示变量不能改变 4、修饰引用的变量,表示引用绑定的变量不能改变 5、修饰函数的参数,表示函数的内部此量不能改变 6、修饰成员函数,放在参数列表的后边,表示常函数,不能修改成员变量 7、修饰函数返回值,表示不能 阅读全文
posted @ 2020-05-09 14:46 卖雨伞的小男孩 阅读(174) 评论(0) 推荐(0) 编辑
摘要: 1. 在类的构造函数和析构函数中没有匹配的调用new和delete函数 两种情况下会出现这种内存泄露:一是在堆里创建了对象占用了内存,但是没有显示地释放对象占用的内存;二是在类的构造函数中动态的分配了内存,但是在析构函数中没有释放内存或者没有正确的释放内存 2. 没有正确地清除嵌套的对象指针 3.  阅读全文
posted @ 2020-05-09 14:22 卖雨伞的小男孩 阅读(1148) 评论(0) 推荐(0) 编辑
摘要: void的字面意思是空类型,void *的意思是空类型指针,void 不是一个真正的类型,我们在声明变量的时候从来不会像下面这样声明: void a; 如果我们写了一行这样的代码,某些编译器会直接报错,有些则不会,但也没有任何意义。 void真正的用途在下面两个方面: 对函数返回值的限定 对函数参数 阅读全文
posted @ 2020-05-09 14:16 卖雨伞的小男孩 阅读(1649) 评论(0) 推荐(0) 编辑
摘要: 先考虑一种情况,对一个已知对象进行拷贝,编译系统会自动调用一种构造函数——拷贝构造函数,如果用户未定义拷贝构造函数,则会调用默认拷贝构造函数。 先看一个例子,有一个学生类,数据成员时学生的人数和名字: #include <iostream> using namespace std; class St 阅读全文
posted @ 2020-05-09 11:48 卖雨伞的小男孩 阅读(313) 评论(0) 推荐(0) 编辑
摘要: 首先, C++中的explicit关键字只能用于修饰只有一个参数的类构造函数, 它的作用是表明该构造函数是显示的, 而非隐式的, 跟它相对应的另一个关键字是implicit, 意思是隐藏的,类构造函数默认情况下即声明为implicit(隐式). 那么显示声明的构造函数和隐式声明的有什么区别呢? 我们 阅读全文
posted @ 2020-05-09 10:24 卖雨伞的小男孩 阅读(1075) 评论(0) 推荐(0) 编辑
摘要: 一、概述 为了实现C++的多态,C++使用了一种动态绑定的技术。这个技术的核心是虚函数表(下文简称虚表)。本文介绍虚函数表是如何实现动态绑定的。 二、类的虚表 每个包含了虚函数的类都包含一个虚表。 我们知道,当一个类(A)继承另一个类(B)时,类A会继承类B的函数的调用权。所以如果一个基类包含了虚函 阅读全文
posted @ 2020-05-09 09:37 卖雨伞的小男孩 阅读(343) 评论(0) 推荐(0) 编辑