游戏开发论坛

 找回密码
 立即注册
搜索
楼主: aear

C++基本功和 Design Pattern系列(2) Type Cast, Interface Inheritance VS

[复制链接]

4

主题

66

帖子

66

积分

注册会员

Rank: 2

积分
66
发表于 2006-10-30 14:17:00 | 显示全部楼层

Re:C++基本功和 Design Pattern系列(2) Type Cast, Interface Inheritance

继续研究马肝大大的深奥语言中.......~~``

27

主题

179

帖子

259

积分

中级会员

Rank: 3Rank: 3

积分
259
 楼主| 发表于 2006-10-30 14:35:00 | 显示全部楼层

Re:C++基本功和 Design Pattern系列(2) Type Cast, Interface Inheritance

实际上就是因为有inheritance的混乱才会导致virtual function需要在base的protected里,不过对于interface inheritance来说,已经解决了这个混乱,因为所有的interface method都是 pure virtual. 因此不需要用protected. 但是对于 implementation inheritance,才需要把base的virtual放在protected里。不过使用protected和friend是很降低效率的。。。。。。。看情况决定吧。

4

主题

66

帖子

66

积分

注册会员

Rank: 2

积分
66
发表于 2006-10-30 14:43:00 | 显示全部楼层

Re:C++基本功和 Design Pattern系列(2) Type Cast, Interface Inheritance

坐在墙角观战ING.......

8

主题

716

帖子

716

积分

高级会员

Rank: 4

积分
716
发表于 2006-10-30 15:55:00 | 显示全部楼层

Re:C++基本功和 Design Pattern系列(2) Type Cast, Interface Inheritance

继续re aear:
1. 我前面指的virtual放在public中,只是一个是否良好设计的问题. virtual本身并不混乱
2. 好的设计中,client不应该直接操作virtual接口
3. private、protected、public和friend都只是compile期会检查的东西,本身是不会有运行期的效率影响的

《Exceptional C++ Style》17、18、19章中已经有详细的介绍其原因,这也是C++在OO这么些年来所总结和积累下来的经验之谈,鄙人也身有同感,所以才极力倡导.

2

主题

112

帖子

112

积分

注册会员

Rank: 2

积分
112
发表于 2006-11-1 12:28:00 | 显示全部楼层

Re: Re:C++基本功和 Design Pattern系列(2) Type Cast, Interface Inherit

aear: Re:C++基本功和 Design Pattern系列(2) Type Cast, Interface Inheritance VS Implementation Inheritance

实际上就是因为有inheritance的混乱才会导致virtual function需要在base的protected里,不过对于interface ...


比较倾向这个观点。感觉如果作为interface来用,那么pure virtual声明为public的应该没什么问题吧?

希望有人能具体说说interface实现成public pure virtual会出现什么问题……

89

主题

4036

帖子

4132

积分

论坛元老

Rank: 8Rank: 8

积分
4132
发表于 2006-11-1 12:52:00 | 显示全部楼层

Re:C++基本功和 Design Pattern系列(2) Type Cast, Interface Inheritance

个人认为: interface function 越少越好.
pure virtual 除非你仅仅是做抽象层. 比如做一个抽象类. 那么public是必须的.
如果你仅仅是想让子类能改写一些父类的行为.那么能protected就protected. 这个主要是也是遵守"interface function 越少越好"的原则

比如我现在要支持多渲染器那么 RenderSystem的base class 的function都是public pure virtual .
而GUI 里面, xuiDialog/xuiWindow这两个基类.几乎只有hide/show等几个常用的public   function. 其他的都是protected的.
这样的好处是client 使用的时候不会迷惑.而扩展的时候也很明确需要做什么.

2

主题

112

帖子

112

积分

注册会员

Rank: 2

积分
112
发表于 2006-11-1 16:06:00 | 显示全部楼层

Re:C++基本功和 Design Pattern系列(2) Type Cast, Interface Inheritance

哦,这样啊。
我其实也是在尝试作支持各种API的渲染器……

34

主题

443

帖子

478

积分

中级会员

Rank: 3Rank: 3

积分
478
发表于 2006-11-3 17:43:00 | 显示全部楼层

Re:C++基本功和 Design Pattern系列(2) Type Cast, Interface Inheritance

好东西,顶一下

1

主题

18

帖子

18

积分

新手上路

Rank: 1

积分
18
发表于 2006-11-3 17:53:00 | 显示全部楼层

Re: C++基本功和 Design Pattern系列(2) Type Cast, Interface Inheritanc

感觉有收获 :)

2

主题

5

帖子

11

积分

新手上路

Rank: 1

积分
11
发表于 2006-11-16 10:44:00 | 显示全部楼层

Re:C++基本功和 Design Pattern系列(2) Type Cast, Interface Inheritance

从Aear发表c系列开始一直在看,到现在这篇觉得完全不懂了,晕啊。感觉自己差得太多啦~不过要感谢一下Aear的这种奉献精神。
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

GMT+8, 2026-1-25 20:47

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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