-
RTTI动态类型转换查看全部
-
接口类:仅含有纯虚函数的类称为接口类。 接口类更多的表达一种协议或者能力。 接口类因为不能被实例化对象,所以定义构造函数 & 析构函数没有意义,使用系统自带的构造函数 & 析构函数即可。查看全部
-
接口类: 1. 没有成员数据 2. 只有成员函数 3. 成员函数都为虚函数查看全部
-
(1) 重载的几个函数必须在同一个类中; 覆盖的函数必须在有继承关系的不同的类中 (2) 覆盖的几个函数必须函数名、参数、返回值都相同; 重载的函数必须函数名相同,参数不同。参数不同的目的就是为了在函数调用的时候编译器能够通过参数来判断程序是在调用的哪个函数。这也就很自然地解释了为什么函数不能通过返回值不同来重载,因为程序在调用函数时很有可能不关心返回值,编译器就无法从代码中看出程序在调用的是哪个函数了。 (3) 覆盖的函数前必须加关键字Virtual; 重载和Virtual没有任何瓜葛,加不加都不影响重载的运作。 关于C++的隐藏规则: 我曾经听说过C++的隐藏规则: (1)如果派生类的函数与基类的函数同名,但是参数不同。此时,不论有无virtual 关键字,基类的函数将被隐藏(注意别与重载混淆)。 (2)如果派生类的函数与基类的函数同名,并且参数也相同,但是基类函数没有virtual 关键字。此时,基类的函数被隐藏(注意别与覆盖混淆)。查看全部
-
(1)纯虚函数:是没有函数体的虚函数,而且要函数值 = 0 (2)抽象类:包含纯虚函数的类叫“抽象类” (3)抽象类不允许实例化对象,只有当子类把父类的抽象函数都实现了,子类才能实例化对象查看全部
-
有虚函数时,对象中首先存虚函数表指针,再存数据成员地址,没有虚函数时,首先存的是数据成员的地址。 有虚函数时,先使用指针 p 指向对象,访问的虚函数表指针,(*p)取得的是虚函数表地址,再使 p++ 就指向了数据成员,(*p)就能取得数据成员的值。查看全部
-
对象的大小:在类实例化出的对象中数据成员占据的内存大小,不包括成员函数。 对象的地址:通过一个类实例化一个对象,对象在内存中会占有一定的内存单元,内存单元的第一个内存单元的地址。 对象成员的地址:用类实例化一个对象之后,对象当中可能有一个或者多个数据成员,每一个数据成员所占据的地址。对象的每个数据成员,因为类型不同,占据的内存大小也有不同,地址也不同。 一个数据成员都没有,C++用一个内存单元表明对象的存在。 虚函数表指针:具有虚函数的情况下,实例化对象时,对象的第一块内存中存储的是一个指针,为虚函数表指针,占据大小为4. sizeof(对象名):是对象的大小查看全部
-
隐藏:父类与子类出现了同名函数称为函数的隐藏 覆盖:如果我们没有在子类当中定义同名的虚函数,那么在子类虚函数表当中,就会写上父类的虚函数的函数入口地址,如果我们在子类当中也定义了同名的虚函数,那么在子类的虚函数表当中把原来的父类的虚函数的函数地址覆盖,覆盖成子类的虚函数的函数地址。查看全部
-
接口类:仅含有纯虚函数的类称为接口类。 接口类更多的表达一种协议或者能力。 接口类因为不能被实例化对象,所以定义构造函数 & 析构函数没有意义,使用系统自带的构造函数 & 析构函数即可。查看全部
-
纯虚函数抽象类:含有纯虚函数的类。 抽象类无法实例化对象。 抽象类的子类必须把抽象父类的所有纯虚函数进行实现,才能够进行实例化。查看全部
-
Shape *shape1 = new Rect(3,5)实际上是创造了子类 Rect 的对象,但却是一个父类的指针指向他,子类继承父类,父类的指针只能访问到父类已有的成员函数而不能访问到子类独有的成员函数,这就是为什么不用虚函数时调用子类成员函数只能调用到父类的成员函数的原因。 虚析构函数是为了避免子类堆中申请的内存在销毁父类指针的时候不能销毁这个堆中的内存产生内存泄露 虚函数使用virtual关键字定义,但使用virtual关键字时,并非全部是虚函数??? 虚函数特性可以被继承,当子类中定义的函数与父类中虚函数的声明相同时,该函数也是虚函数。 虚析构函数是为了避免使用父类指针释放子类对象时造成内存泄露。查看全部
-
虚析构函数:virtual->析构函数<br> virtual在修饰函数时的限制:<br> 1.普通函数不能是虚函数。<br> 2.静态成员函数不能是虚函数。<br> 多态---》用父类指针指向子类对象--》delete 时只调用父类析构函数,需要用虚析构。 3.内联函数不能是虚函数。<br> 4.构造函数不能是徐含糊。查看全部
-
产生多态的基础是继承关系,没有继承就没有多态 多态具体到语法中是指,使用父类指针指向子类对象,并可以通过该指针调用子类的方法。 多态的语法核心是virtual关键字,必须使用virtual才能使多个类间建立多态关系。查看全部
-
纯虚函数抽象类:含有纯虚函数的类。 抽象类无法实例化对象。 抽象类的子类必须把抽象父类的所有纯虚函数进行实现,才能够进行实例化。查看全部
-
(1)用宏定义去解决重复包含头文件的问题 (2)在父类中定义“虚函数”,子类中为了更好的编程习惯,在同名的成员函数前也写上“virtual”关键字,然后多态的现象就发生了,父类的指针可以调用到子类的成员函数了查看全部
举报
0/150
提交
取消