回 帖 发 新 帖 刷新版面

主题:关于动态联编

#include<iostream.h>
//using namespace std;
class A{
public:
virtual void my(){
     cout<<"A"<<endl;
}; 
};
class B:public A{
public:
void my(){
     cout<<"B"<<endl;
}
};
class C:public B{
    void my(){
     cout<<"C"<<endl;
}
};
void main(){
  C c0;
  c0.A::my();
  c0.B::my();
}
怎么能访问到类A\B
在动态联编时用指针vtable指向虚函数表
同名覆盖了不是吗?
既然“覆盖”,怎么访问基类函数?[em18][em18]

回复列表 (共3个回复)

沙发

你上面的代码里已经示范了,用域操作符显式调用,你还问什么?

板凳

我就是对结果很费解!
我觉得根本访问不到!!
我觉得因为虚表中
已“覆盖”基类的虚函数,
而不像一般的继承(没有虚函数),
只是同名“隐藏“
我想”掩藏“和”覆盖“总不是一个意思吧

3 楼

不对,你上面的例子,仍然是“同名隐藏”,而不是覆盖。

这种调用方式称为“虚拟函数的静态调用”,详细的你可参参考"C++ Primer"第17章的5.3节,"C++ Primer"好像本论坛前几天的帖子里有人提供过中文版的电子书下载,如果你没的话可以找找,或者去网上找找。

我来回复

您尚未登录,请登录后再回复。点此登录或注册