虚函数返回类型问题

vcgaoshou 2007-04-25 08:00:02
派生类中定义虚函数必须与基类中的虚函数同名外,还必须同参数表,同返回类型。否则被认为是重载,而不是虚函数。如基类中返回基类指针,派生类中返回派生类指针是允许的,这是一个例外。如何理解“如基类中返回基类指针,派生类中返回派生类指针是允许的”请高手举个例
...全文
619 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
VCLIFE 2007-04-25
  • 打赏
  • 举报
回复
学习
xlbdan 2007-04-25
  • 打赏
  • 举报
回复
派生类中定义虚函数必须与基类中的虚函数同名外,还必须同参数表,同返回类型。否则被认为是重载,而不是虚函数。

不是重载,是覆盖了.在子类里看不到父类的那个函数了


如基类中返回基类指针,派生类中返回派生类指针是允许的,这是一个例外。如何理解“如基类中返回基类指针,派生类中返回派生类指针是允许的”请高手举个例

这是可以的,唯一的一种例外情况

class A
{
public:
virtual A* f(){}
};
class B : public A
{
public:
B* f(){}
};

这样,A和B两个类的f()函数就构成了一对虚函数
ab544027082 2007-04-25
  • 打赏
  • 举报
回复
虚函数的定义是这样的:
class a
{
virtual void print();
};
class b:public a
{
void print();
}
liujiwei2007 2007-04-25
  • 打赏
  • 举报
回复
不是覆盖 是隐藏
dai_weitao 2007-04-25
  • 打赏
  • 举报
回复
返回类型不同就不是继承了吧, 覆盖啊.
liujiwei2007 2007-04-25
  • 打赏
  • 举报
回复
派生类中定义虚函数必须与基类中的虚函数同名外,还必须同参数表,同返回类型。否则被认为是重载,而不是虚函数

不是重载。因为不在同一作用域。仍然是虚函数。

如基类中返回基类指针,派生类中返回派生类指针是允许的,这是一个例外。如何理解“如基类中返回基类指针,派生类中返回派生类指针是允许的”请高手举个例

这个应该不允许的,它破坏了多态性
lauxp 2007-04-25
  • 打赏
  • 举报
回复
我觉得可能在clone设计模式里面用得到:

class Base
{
virtual Base* clone() = 0;
virtual ~Base();
};

class Derived1: public Base
{
Derived1* clone()
{
return new(*this);
}
};

但是我觉得返回Base*足够了,这才体现了面向对象是面向接口的本质
=============================================================
个人理解

64,652

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧