-
实例化公交车类和坦克类,将对象传入到doSomething函数中,调用相应函数查看全部
-
讲的真好查看全部
-
接口类更多的表达一种能力或协议 class Flyable { public: virtual void takeoff() = 0; //起飞 virtual void land() = 0; //降落 };查看全部
-
接口类:仅含有纯虚函数的类 无数据成员,只有成员函数,成员函数都是纯虚函数查看全部
-
从虚函数表来看纯虚函数: 抽象类:含有纯虚函数的类 抽象类无法实例化对象 抽象类的子类只有将抽象类中的所有纯虚函数都做了实现,才能实例化对象查看全部
-
纯虚函数:没有函数体,并且=0查看全部
-
1、成员函数加上virtual关键字,在Shape类实例化对象的时候,就含有一个虚函数表指针,虚函数表 2、定义了虚析构函数,在Shape类实例化对象的时候,就含有一个虚函数表指针,虚函数表 3、由于父类定义了虚析构函数,能够传递到Circle类(子类),在子类实例化对象的时候,产生虚函数表,虚函数表指针。对于子类对象而言,前四个基本内存单元是虚函数表的地址,接下来是数据成员的地址查看全部
-
Shape类没有成员,C++为了表明对象的存在,用1个内存单元去标记,sizeof(shape) = 1 Circle类有一个int成员,所以sizoof(circle) = 4查看全部
-
(接上面)而在子类中,虚函数表中也会产生一个指向子类析构函数的指针,此时若使用父类指针指向子类对象,那么delete父类指针时,就可以通过父类找到子类的虚函数表指针,然后找到虚函数表,再找到子类的析构函数,执行完毕后,系统会自动执行父类的析构函数查看全部
-
虚析构函数: 理论前提:执行完子类的析构函数就会执行父类的析构函数 如果在父类中定义了虚析构函数,父类的虚函数表当中就会有一个父类析构函数的函数指针查看全部
-
函数的隐藏和覆盖: 隐藏:父类和子类出现同名函数 覆盖:子类没有定义同名虚函数,在子类虚函数表当中就会写上父类相应虚函数的入口地址;子类定义了同名虚函数,子类虚函数表中就会将父类相应虚函数的入口地址覆盖成子类虚函数的入口地址查看全部
-
若子类Circle定义了虚函数calcArea(),则实例化Circle对象时,函数指针会发生变化查看全部
-
实例化Circle对象时: 由于Circle类中没有定义虚函数,从父类中继承了虚函数,也会产生一个虚函数表(是子类的虚函数表),但函数指针却是一样的查看全部
-
假设父类Shape定义了虚函数calcArea(),而子类Circle没有定义calcArea() 实例化Shape对象时: 虚函数表指针——>虚函数表——>函数指针(函数入口地址)查看全部
-
virtual在函数中的使用限制: 1、普通函数不能是虚函数 2、静态函数不能是虚函数 3、内联函数不能是虚函数 4、构造函数不能是虚函数查看全部
举报
0/150
提交
取消