我有两个班B和D
class B{
public:
virtual int prva()=0;
virtual int druga(int)=0;
};
class D: public B{
public:
virtual int prva(){return 42;}
virtual int druga(int x){return prva()+x;}
};
我的任务是创建一个函数,该函数采用指向对象 B 的指针并打印返回方法 'prva' 和 'druga' 的值而不使用它们的名称(通过虚拟表访问)
我编写了以下代码,成功打印了方法 'prva' 的返回值,但未能对第二种方法 'druga' 执行相同的操作
typedef int (*PTRFUN1)(void);
typedef int (*PTRFUN2)(int);
void function (B* var){
int* vptr = *(int**)var;
PTRFUN1 fun1 = (PTRFUN1)vptr[0];
PTRFUN2 fun2 = (PTRFUN2)vptr[1];
pprintf("Prva:%d\n", fun1());
printf("Druga:%d\n", fun2(2));
}
int main(void){
B *pb = new D();
function(pb);
}
此代码执行打印:“Prva:42”
它无法prva()
在“druga”内部调用,我不知道为什么。
此外,如果我只是删除 call ofprva()
并让 body just be return x
,则无论我尝试通过什么参数发送,方法 'druga' 将始终返回“42”或我让 'prva' 返回的任何数字fun2()
任何想法我在这里做错了什么,我应该如何访问方法?