-
1.对象大小:计算的是类的成员变量的大小,对于一个数据成员都没有的类,实例化的对象大小为1。目的是为了标识类的存在。 2.但是如果类成员中存在虚函数,则实例化的对象大小中,虚函数表指针占用对象的前4字节(即虚函数表的地址在类起始位置。),后面才是数据成员的大小。 3.只有虚的析构函数,没有虚的构造函数; 具体来说: 一. 虚析构函数或虚成员函数时,而去实例化一个对象时,产生一个虚函数表,在对象中也就产生一个虚函数表指针,此指针占据对象的前四个内存单元。(可以测试对象占据字节大小来判断)-----可以通过用指针指向对象的方式来判断(Shape shape(100); int *p=(int*)&shape; cout<<(unsigned int)(*p)<<endl;p++;cout<<(unsigned int)(*p)//第一个打印出的就是shape前四个内存单元也就是虚函数表指针指向的值,因为无值所以是地址,第二打印出的是为数据成员初始化的值100) 二. 多态从根本上是通过函数指针来实现的。 父类的虚函数会被子类继承,虚函数说到底是更改了指向基类虚函数的函数指针,最后指向了派生类所定义的虚函数。查看全部
-
多态的实现:虚函数表 Virtual method table is a mechanism used in a programming language to support dynamic dispatch (or run-time method binding). 对象实例化后,自动加入一个虚函数表的指针.查看全部
-
本来父类指针只能调用子类中从父类继承的方法,但加了virtual之后,父类指针也能调用子类的方法. 我也不知道为什么.查看全部
-
Shape *shape1 = new Rect(3,5); shape1 -> calcArea(); 调用的是父类的方法还是子类的方法取决于父类中的方法是不为virtual.查看全部
-
父类的virtual方法a会被子类继承,子类中的a方法可以电显式的声明为virtual,也可以由系统隐含加入virtual修饰.查看全部
-
虚函数是能使得指向子类的父类指针在调用时能够正常调用子类的函数,而不是调用父类的函数,而且这也能使得子类对象在释放空间时能正常销毁。查看全部
-
virtual不能修饰静态成员函数和构造函数。查看全部
-
virual 不能修饰普通函数、内联函数、查看全部
-
虚函数查看全部
-
早绑定查看全部
-
rtti运行时类型识别查看全部
-
接口类没有构造函数和析构函数,也没有数据成员查看全部
-
没有引用,通过了查看全部
-
仅含有纯虚函数的类称为接口类查看全部
-
c++中多态的原理是通过虚函数表实现的查看全部
举报
0/150
提交
取消