-
int *p=(int *)&shape;将一个对象的地址取出来,前面加强制类型转换查看全部
-
当一个类一个数据成员也没有的情况下,这个类也可以实例化,但是如何标记该对象存在,用一个内存单元标记该对象存在查看全部
-
概念介绍:<br> 1.对象大小<br>指类实例化对象时,数据成员占有内存空间的大小,不包括成员函数。没有任何数据成员的类理论上讲不占任何内存。 2.对象地址<br>指通过一个类实例化一个对象时,对象占有一定的内存单元,这个对象占据的第一个单元的地址即是对象的地址 3.对象成员地址<br>指当用一个类实例化一个对象时,这个对象可能有多个数据成员,由于数据成员的数据类型不同,那么占据的空间大小也就不同,这个类的每个成员都会一定的空间,每个数据成员的地址就是对象成员的地址不同 4.虚函数表指针指在有虚函数时,实例化一个对象时,这个对象的第一块内存中存放的是一个指针,是虚函数表的地址,大小为4查看全部
-
在子类当中,虚函数表中也会产生一个指向子类析构函数的指针。这时使用父类的对象指向子类的对象,当用delete释放父类对象时,可以通过父类找到子类的虚函数表指针,通过虚函数表指针找到虚函数表,通过虚函数表找到析构函数指针,从而执行子类的析构函数。查看全部
-
析构时虚函数表的工作原理 如果在父类中了虚析构函数,在父类中的虚函数表中,就会有有一个父类析构函数的指针,查看全部
-
先执行子类的析构函数然后系统自动执行父类的析构函数,如果使用父类的指针通过delete的方式释放子类的对象,只要能够通过父类的指针可以使用子类的析构函数这个问题就解决了。查看全部
-
函数的隐藏:<br> 如果父类与子类具有同名函数,子类会隐藏父类的同名函数<br> 函数的覆盖: 父类中具有虚函数:<br> 子类继承父类且没有重新定义该虚函数,则在子类的虚函数表中有一个指针指向父类该函数的入口地址;若子类中重新定义了该虚函数,则子类的虚函数表中指针指向自己的函数的入口地址,会覆盖到原来父类的虚函数的地址。查看全部
-
虚函数表 当实例化shape对象的时候,会生成一个虚函数表指针,该指针指向一个shape的虚函数表,虚函数表里面有指向虚函数的指针,该指向虚函数的指针指向一个虚函数查看全部
-
通过一个指针指向对象我们就叫他对象指针;指针指向函数,函数是一段二进制代码;函数的指针由四个基本单元组成,存储着函数的地址。查看全部
-
函数的本质就是一段在内存中的二进制代码查看全部
-
typeid and dynamic_cast使用查看全部
-
typeid注意事项查看全部
-
dynamic_cast注意事项查看全部
-
虚函数使用virtual关键字定义,但使用virtual关键字时,并非全部是虚函数??? 虚函数特性可以被继承,当子类中定义的函数与父类中虚函数的声明相同时,该函数也是虚函数。 虚析构函数是为了避免使用父类指针释放子类对象时造成内存泄露。查看全部
-
virtual关键字在修饰函数的时候的一些限制:<br> (1)普通函数不能被它修饰,这个函数要是某个类的成员函数,不能是全局函数<br> (2)不能修饰静态成员函数,静态成员函数不属于任何一个对象,它与类同生共死编译错误 (3)不能修饰内联函数,如果用virtual修饰它就变成一个纯粹的虚函数 (4)不能修饰构造函数,编译错误查看全部
举报
0/150
提交
取消