游戏开发论坛

 找回密码
 立即注册
搜索
查看: 3083|回复: 8

问一个C++类继承问题

[复制链接]

18

主题

66

帖子

66

积分

注册会员

Rank: 2

积分
66
发表于 2008-3-31 20:00:00 | 显示全部楼层 |阅读模式
class A
{
   public:
      void s(){}
};

class B:public A
{
     public:
       void c(){}
};

A* a;
a = new B;
这里a要使用 c()函数 还得转换 ( (B*)a )->c();
请为有什么办法 不需要转换( (B*)a ) 直接 a->c()?
不管什么办法 要效率高  有办法吗〉?

32

主题

1259

帖子

1351

积分

金牌会员

Rank: 6Rank: 6

积分
1351
发表于 2008-3-31 20:44:00 | 显示全部楼层

Re:问一个C++类继承问题

函数前写上 virtual

3

主题

137

帖子

151

积分

注册会员

Rank: 2

积分
151
QQ
发表于 2008-3-31 20:51:00 | 显示全部楼层

Re:问一个C++类继承问题

声明为虚函数.

60

主题

1319

帖子

1319

积分

金牌会员

Rank: 6Rank: 6

积分
1319
发表于 2008-4-1 10:07:00 | 显示全部楼层

Re:问一个C++类继承问题

为什么要这么设计?

1

主题

24

帖子

24

积分

注册会员

Rank: 2

积分
24
发表于 2008-4-1 23:28:00 | 显示全部楼层

Re:问一个C++类继承问题

不是啊.a是基类A的指针,而引用的地址是B类的对象.
但是类A中不包含函数c,所以不能用a->c();
必须要用( (B*)a )->c();转化为B类才有这个函数.
如果类A中的s()函数是c()的话在前面加个virtual就可以用基类的方法了,不过是同函数名但是调用的是B类中的.
建议你看看c++primer第17章.

1

主题

50

帖子

52

积分

注册会员

Rank: 2

积分
52
发表于 2008-4-2 17:35:00 | 显示全部楼层

Re:问一个C++类继承问题

B *b = new B();
b->c();
另外要说下..你父类指针强转子类指针(自上到下)是不安全的类型转换

18

主题

66

帖子

66

积分

注册会员

Rank: 2

积分
66
 楼主| 发表于 2008-4-2 18:39:00 | 显示全部楼层

Re:问一个C++类继承问题

谢谢各位  c++ 继承我很熟悉, 是我的设计想法错了, 原本想 假如一个服务器创建很多  monster or monsterEx, 他们都继承自 baseEntityClass
而 引擎底层已经提供了一个 baseEntityClass * entityBuffer[MAX];   

entityBuffer[ i++ ]  = new monster ;
entityBuffer[ i++ ]  = new monsterEx ;
我是想调用起来 不需要关心 是否是 monster或者monsterEx, 但现在想起来想法就是错的,  既然明确调用了
monsterEx 那么我也能明确的去转换,再调用属于它的方法。

yjangel 说父类指针强转子类指针(自上到下)是不安全的类型转换
那么像引擎提供的这种baseEntityClass * entityBuffer[MAX];   不转换有什么办法呢?为什么不安全呢? C++好像存在这种用法吧?  可能是我没学好 大家指教 :)

1

主题

24

帖子

24

积分

注册会员

Rank: 2

积分
24
发表于 2008-4-2 21:04:00 | 显示全部楼层

Re:问一个C++类继承问题

可以考虑虚函数,派生类不改变基类函数

18

主题

66

帖子

66

积分

注册会员

Rank: 2

积分
66
 楼主| 发表于 2008-4-3 13:00:00 | 显示全部楼层

Re:问一个C++类继承问题

基类是引擎提供的  而entityBuffer 引擎底层已经给了 baseEntityClass * entityBuffer[MAX];   
我 不可能 去改写 基础类吧, 我继承 基础类 写出新的 entity 必然有 他自己的方法和属性吧,
当我使用 entityBuffer的时候 也只能去 强行转换了 ? 哪位 高手 谈谈 新的设计思路 ?
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

GMT+8, 2025-12-20 15:45

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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