读书人

只存在于派生类中的虚函数有关问题

发布时间: 2013-09-09 20:31:09 作者: rapoo

只存在于派生类中的虚函数问题
class a
{
public:
virtual void f1();
virtual void f2();
}
class b:public a
{
public:
virtual void f1();
virtual void f3();
}

为什么在b的虚函数表里面看不到f3呢
VC6.0下的。。
[解决办法]
你是怎么实例化b的,肯定是有的才对,要b instB;或者a *pB = new b();

还有一种情况就是你位置找错了吧。
[解决办法]
不要用vc6了。。。
[解决办法]

引用:
Quote: 引用:

不要用vc6了。。。

过时了?难道是....是不是别的环境编译就会有呢?


建议换成vs2010或者更新的,vc6老到不支持c++98标准。。
更不用说c++03,c++03 tr1, c++11了
c++14明年都要出了
[解决办法]
两个虚表吧!
f1,f2 父类的虚表
f3 子类的虚表
[解决办法]
我不信他没有
[解决办法]
VC6对C++标准的符合度还不到70%, 至少也要升到VS2005以后的版本
[解决办法]
VC 两个虚表会合并成一个
#include<typeinfo.h>
#include<iostream>
using namespace std;

class A{
public:
virtual
void print(){
cout<<sizeof(A)<<endl;
cout<<"print() "<<typeid(A).name()<<endl;
};

};

class B:public A{
public:
virtual
void print(){
cout<<sizeof(A)<<endl;
cout<<"print() "<<typeid(B).name()<<endl;
};
virtual
void show(){
cout<<sizeof(B)<<endl;
cout<<"show() "<<typeid(B).name()<<endl;

};

};

int vfun()
{
A a;
B b;
A &ref=a;

A& refB =b;



A *pa=&a;
B & bref=b;

B *pb =&b;
typedef void (A::*Afun)();
typedef void(B::*Bfun)();
Afun af =a.print ;
Bfun bf =b.print ;

(pa->*af)();
(pb->*bf)();
//模拟调用虚函数,也许只对VC有用。
__asm pushA

__asm lea ecx,a
__asm mov ebx,DWORD PTR [ecx]

__asm call [ebx];

__asm lea ecx,b
__asm mov ebx,DWORD PTR [ecx]

__asm call [ebx];

__asm mov ecx,pb
__asm mov ebx,DWORD PTR [ecx]
__asm add ebx,4
__asm call [ebx];
__asm popA

cin.get();

return 0;
}

输出:
4
print() class A
4
print() class B
4
print() class A
4
print() class B
4
show() class B

读书人网 >C++

热点推荐