游戏开发论坛

 找回密码
 立即注册
搜索
查看: 2114|回复: 4

关于继承了抽象类的抽象类的实现问题

[复制链接]

51

主题

134

帖子

140

积分

注册会员

Rank: 2

积分
140
发表于 2008-6-15 17:59:00 | 显示全部楼层 |阅读模式
有什么方法可以不写f::printc()而改用e::printc()实现代码重用?
//SAMPLE
#include <stdio.h>

class c
{
public:
        virtual void printc()=0;
};

class d:public c
{
public:
        virtual void printd()=0;
};

class e:public c
{
public:
        e(){}
        virtual void printc(){printf("I'm c;\n");}
};

class f:public d
{
public:
        f(){}
        virtual void printc(){printf("I'm c;\n");}
        virtual void printd(){printf("I'm d;\n");}
};

60

主题

1319

帖子

1319

积分

金牌会员

Rank: 6Rank: 6

积分
1319
发表于 2008-6-16 15:38:00 | 显示全部楼层

Re:关于继承了抽象类的抽象类的实现问题


  1. class c
  2. {
  3. public:
  4.         virtual void printc()=0;
  5. };

  6. class d : virtual public c
  7. {
  8. public:
  9.         virtual void printd()=0;
  10. };

  11. class e : virtual public c
  12. {
  13. public:
  14.         e(){}
  15.         virtual void printc(){printf("I'm c;\n");}
  16. };

  17. class f : public d, public e
  18. {
  19. public:
  20.         f(){}
  21.         //virtual void printc(){printf("I'm c;\n");}
  22.         virtual void printd(){printf("I'm d;\n");}
  23. };
复制代码


仅就这几行代码来说还没问题,不过它们的成员一多,d和e同时实现了c的一些虚函数的时候可就得小心了。
纯理论研究,不知道什么时候要这么干

51

主题

134

帖子

140

积分

注册会员

Rank: 2

积分
140
 楼主| 发表于 2008-6-16 20:27:00 | 显示全部楼层

Re:关于继承了抽象类的抽象类的实现问题

试过的 不行的 当 d* td=new f();时编译器报错。。。

1>f:\shiyan\temp\temp.cpp(23) : error C2259: 'f' : cannot instantiate abstract class
1>        due to following members:
1>        'void c::printc(void)' : is abstract
1>        f:\shiyan\temp\m.h(6) : see declaration of 'c::printc'

60

主题

1319

帖子

1319

积分

金牌会员

Rank: 6Rank: 6

积分
1319
发表于 2008-6-17 09:18:00 | 显示全部楼层

Re:关于继承了抽象类的抽象类的实现问题

我这么写多半是有问题的,肯定没有实用价值。编译会有警告
warning C4250: 'f' : inherits 'e::e::printc' via dominance
        d:\vsprojects\dfsd\dfsd.cpp(22) : see declaration of 'e::printc'
不过用VS2005和VS2008都能编译过去,运行结果
I'm c;
I'm d;
应该想个不用多继承的方法,多继承菱形结构太容易出问题了

51

主题

134

帖子

140

积分

注册会员

Rank: 2

积分
140
 楼主| 发表于 2008-6-17 20:20:00 | 显示全部楼层

Re:关于继承了抽象类的抽象类的实现问题

我也是VS2005。。。
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

GMT+8, 2026-1-22 06:27

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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