注册 登录
编程论坛 C++教室

请教,在中间类中定义一个空的虚函数起什么作用?最好能举例说明,感谢!

全世界安静 发布于 2012-06-16 10:30, 1161 次点击
如题!
7 回复
#2
pangding2012-06-16 11:18
你举个情况我们分析分析?
#3
全世界安静2012-06-16 11:33
回复 2楼 pangding
class A()
{
public:
 virtual void show()
    {
      cout<<"FUCK!"<<endl;
    }
};
class B : public A
{
public:
  virtual void show()
    {
    }
} ;
class C: public B
{
};
书上说,声明空的虚函数是为了保证B的派生类能使用类A的虚函数界面,使调用c->show()能沿着从A对象的虚函数路径正确存取C::show()虚函数。
不理解
#4
lz10919149992012-06-16 12:54
根本没这个必要,初始化虚函数表的时候,会把重定义后的虚函数的地址覆盖掉上一级的地址。
程序代码:
#include <iostream>
using namespace std;

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

class B : public A {};
class C : public B {
public:
    void print()
    {
        cout << "C" << endl;
    }
};

int main()
{
    C c;
    static_cast<A&>(c).print();
}
输出:
C
#5
全世界安静2012-06-16 13:17
空的虚函数一般在什么情况下使用?起什么作用?
#6
lz10919149992012-06-16 19:36
回复 5楼 全世界安静
不能说什么空的虚函数,应该说没有重定义该方法,既然没有重定义就用基类的呗。
#7
pangding2012-06-16 21:02
刚看帖的时候我以为楼主问的是基类里的虚函数有什么用。刚要答就发现其实问的是中间类的,想了想没什么出有什么作用。
看来 lz1091914999 也这么认为。我表示他的回答一般都很专业,楼主可以完全采纳。
#8
lz10919149992012-06-16 22:01
回复 7楼 pangding
额,其实我也正在学习C++呢,只是个人意见而已,而且不要说我专业,因为我不是专家。呵呵
1