-
虚函数特性可以被继承,当子类中定义的函数与父类中虚函数的声明相同时,该函数也是虚函数;虚函数使用virtual关键字定义,但使用virtual关键字时,并非全部是虚函数查看全部
-
只有虚析构函数,没有虚构造函数 虚函数使用virtual关键字定义,但使用virtual关键字时,并非全部是虚函数。 虚函数特性可以被继承,当子类中定义的函数与父类中虚函数的声明相同时,该函数也是虚函数。 虚析构函数是为了避免使用父类指针释放子类对象时造成内存泄露。查看全部
-
virtual在修饰函数的使用限制:普通函数不能被限制,不能修饰静态的成员函数,不能修饰内联函数,不能修饰构造函数查看全部
-
虚析构函数:当子类中有从堆中分配的指针,当定义的父类对象指针释放时不会执行子类的析构函数,会导致内存泄漏查看全部
-
多态的具体语法是,当从堆中实例化一个子类的对象,通过该指针可以调用子类的方法 若父类和子类的同名成员函数上添加了“virtual”关键字,可以访问到子类的成员函数查看全部
-
virtual 虚函数 父类的函数中加上virtual,子类中最好加上virtual查看全部
-
静态多态(早绑定):计算面积时,传入几个参数,在调用的时候就会调用相应参数个数的函数 动态多态(晚绑定):在继承和封装的基础上查看全部
-
此节略微重要了,因为这里介绍了对象/对象成员在内存中的存储... 比如有一个Person类,此类中有一个age的数据成员并且没有虚函数,实例化Person person();之后很明显32位下age应该占用4个字节的内存空间.此时对象person占用的空间应该是4.person的地址就是这4个内存空间的第一个地址. 如果Person类中没有任何数据成员也没有虚函数,那么 Person person(); 之后,person 仍然会占用1个内存空间的大小,因为这1个内存空间只是为了标记对象person的存在,并且可以作为person的地址. 如果Person没有数据成员但是有一个虚函数,从前面的知识可以知道Perosn person();之后 person对象是会有一个虚函数表指针来记录person所对应的虚函数表的,因此虽然person没有任何数据成员但扔回占用4个空间的内存. 如果person有一个数据成员,那么就会占用 4+4 = 8 个内存空间... 并且请注意,如果类中含有虚函数那么实例化的类对象会有虚函数表指针,并且这个虚函数表指针占用的是这对象所开辟内存空间的前4个(32位下)内存空间,之后才是其他的数据成员所占用的空间;也就是说,对象所开辟的内存中会先记录虚函数表再记录其他对象...查看全部
-
virtual 不能修饰构造函数, 编译器会直接报错.查看全部
-
virtual 不能修饰内联函数 如果修饰了内联函数那么计算机会忽略掉 inline 关键字,会让这个函数变成一个纯粹的虚函数...查看全部
-
虚函数不能是静态函数, 也就是说 virtual 不能修饰 static 函数. 因为 静态函数不属于任何一个类,他是和类共存的.查看全部
-
虚函数不能是普通函数也就是说 virtual 关键字不能修饰全局函数 (写在 mian 里面的函数).只能修饰类的成员函数.查看全部
-
虚函数,子类可以重写的方法.如果子类有重写那么会调用子类的此方法. 在OC中的表现比如 init 方法, viewDidLoad 等controller声明周期方法等等这些都是虚函数查看全部
-
静态多态,也就早绑定. 不同参数的方法重载就是其中的一种. 比如有两个方法 int addNum(int a, int b); 和 int addNum(int a, int b, int c); 分别调用 addNum(2, 3); 和 addNum(2, 3, 4) 函数在运行之前,在编译时编译器就已经知道应该调用的是哪个方法,这中叫做静态多态.查看全部
-
面向对象的三大特征, 封装 -> 继承 -> 多态查看全部
举报
0/150
提交
取消