虚函数表的一些性质补充
基础性的建议去这里学习,讲的很详细
由于有些东西有些疑问,自己写了代码观察了一下结果,如有错误不严谨,欢迎指正。
class Base {
int int_base;
public:
virtual void base_f1() {};
};
class Derived1 : public Base {
int int_dirived1;
public:
virtual void base_f1() {};
virtual void direived1_f1() { cout << "派生类1独有func1()" << endl; };
};
class Derived2 : public Base {
int int_dirived2;
public:
virtual void base_f1() {};
virtual void direived2_f1() { cout << "派生类2独有func1()" << endl; };
};
1.每个类都有自己的虚函数表;
即使派生类对其继承的虚函数重写了,但基类对象的[虚函数表]中的虚函数仍然不变。
Base b1;
Derived1 d1;
//查看b1的虚函数表,发现仍然存储的是Base::base_f1()
//查看d1的虚函数表,发现存储的变为Derived::base_f1()
2.多个不同的派生类重写了同一个基类的虚函数,基类的虚函数表存储的虚函数并不会改变;
也可由(1.) 推测出来,即派生类中重写的虚函数并不会影响基类的虚函数。也进一步说明:某个类动态绑定完成后(虚函数表构建完成后),其虚函数表不会再改变。
Base b1;
Derived1 d1;
Derived2 d2;
Base b2;
//查看b1的虚函数表,发现仍然存储的是Base::base_f1()
//查看d1的虚函数表,发现存储的变为Derived1::base_f1()
//查看d2的虚函数表,发现存储变为Derived2::base_f1()
//查看b2的虚函数表,发现仍然存储的是Base::base_f1()
共有条评论 网友评论