day7-虚函数和vptr指针

    xiaoxiao2022-07-14  156

    1.当你使用virtual虚函数的时候,对象中会自动生成vptr指针(指针指向虚函数表),并且形成虚函数表。 2.每次调用函数的时候,编译器会根据虚函数表中是否有此函数来判断是否执行多态,所以虚函数的效率比普通函数要低(要查表)。 3.vptr指针的存在证明

    class A //类A { public: int geta() { return a; } private: int a; }; cout<<sizeof(A)<<endl; 输出结果为4; class A //类A { public: virtual int geta() { return a; } private: int a; }; cout<<sizeof(A)<<endl; 输出结果为8

    因为构建虚函数后,类中加入了指向虚函数表的vptr指针,所以sizeof(A):4->8; 4.vptr指针分布初始化 若构造子类的时候利用了父类构造,vptr指针首先初始化在父类的虚函数列表,等父类构造完毕后,又初始化在子类中。

    最新回复(0)