游戏开发论坛

 找回密码
 立即注册
搜索
查看: 5307|回复: 3

重写虚函数返回类型有差异,且不是covariant

[复制链接]

17

主题

34

帖子

34

积分

注册会员

Rank: 2

积分
34
发表于 2007-5-31 16:32:00 | 显示全部楼层 |阅读模式
Hi:


  1. class Employee
  2. {
  3. public:
  4.         Employee(void);
  5.         ~Employee(void);
  6.         virtual void display() {cout << "Employee::display(),  base class" << endl;}
  7.         string first_name;
  8.         string last_name;
  9. };

  10. class Manager : public Employee
  11. {
  12. public:
  13.         Manager(void);
  14.         ~Manager(void);
  15.         short level;
  16.         list<Employee*> group;
  17.         void display() {cout << "Manager::display(),  devrived class" << endl;}

  18. };

  19. class HightManager : public Manager
  20. {
  21. public:
  22.         HightManager(void);
  23.         ~HightManager(void);
  24.          int  display() {cout << "HightManager::display(),  devrived devrived class" << endl;return 1;}
  25. };
复制代码

这样写,怎么出现
error C2555: “HightManager::display”: 重写虚函数返回类型有差异,且不是来自“Manager::display”的 covariant

谢谢各位啦!

16

主题

280

帖子

280

积分

中级会员

Rank: 3Rank: 3

积分
280
QQ
发表于 2007-5-31 17:39:00 | 显示全部楼层

Re: 重写虚函数返回类型有差异,且不是covariant

HightManager类的虚函数写错了,与基类的声明不一样,你的基类说返回void,但此类却写成返回int,所以出错

17

主题

34

帖子

34

积分

注册会员

Rank: 2

积分
34
 楼主| 发表于 2007-5-31 20:48:00 | 显示全部楼层

Re: Re: 重写虚函数返回类型有差异,且不是covariant

CuriousZhen: Re: 重写虚函数返回类型有差异,且不是covariant

HightManager类的虚函数写错了,与基类的声明不一样,你的基类说返回void,但此类却写成返回int,所以出错

谢谢啊,不过我是故意写成这样的啊。难道,这样写就不行吗?不好意思,好白吃的问题啊

103

主题

1432

帖子

1458

积分

金牌会员

Rank: 6Rank: 6

积分
1458
QQ
发表于 2007-5-31 21:56:00 | 显示全部楼层

Re:重写虚函数返回类型有差异,且不是covariant

你的问题一点都不白痴.
为什么不行, 主要是语法上, 你混淆了函数重载, 和虚函数重写.
重载是和返回类型无关的. 因为调用的时候你不能通过返回类型来判断调用那个类.
int print(int)
long print(int)
print(1) //调用那个呢?不能决定

重写就不同,重写是改写基类的定义.
一个函数的定义, 正确的规格是包括 返回类型的.
上面两个print, 是两个不同的定义(虽然不构成重载,所以不能写在一个文件中)
假设你的基类B是 int print(int), 子类D 是 void print(int);
B *he = new D();
int count = he->print(1);
子类对基类的首要原则就是接口兼容,很明显上面的代码就有错误了.

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

作品发布|文章投稿|广告合作|关于本站|游戏开发论坛 ( 闽ICP备17032699号-3 )

GMT+8, 2026-1-26 06:57

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表