首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C++ >

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

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

只存在于派生类中的虚函数问题
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

热点排行