作者H45 (!H45)
看板OOAD
标题Re: [问题] 关於物件导向观念的问题
时间Sun Mar 30 13:38:11 2008
※ 引述《saladim (杀拉顶)》之铭言:
: ※ 引述《awes6380 (明智)》之铭言:
: : 一个子类别C里定义了一个跟父类别S里名称一样的function f()
: : 此时有一个物件o定义如下:
: : C o=new C();
: : S p=o;
: : 此时p.f()和o.f()指的是同一个function,这种观念称为?
: : A、Encapsulation
: : B、Overloading
: : C、Inheritance
: : D、Polymorphism
: : E、以上皆非
: : 不知答案是哪一个呢?
: : 另外请教一下,上例中S p=o;是在实做downcast吗?
: 我来猜一下好了
: 1. 父类别f function有加virtual, 且在子类别中定义的f参数也跟父类别中的依样
: 此时答案应该是polymorphism
: 2. 那不管在父类别中有没有加virtual, 在子类别中f的定义, 参数并没有跟父类别一样
: 也就是说, 在父类别中的定义跟子类别中的定义只有名称依样
: 此时应该是E, 会造成function hidding(请查阅effective c++)的现象.
function hiding 在不同的程式语言会有不同的定义
所以此种效应并非物件导向共通的现象。
回到原题:
C 类别继承自 S 类别
C 类别的 f() 成员方法乃继承自 S 类别的 f() 成员方法
今天有一个物件叫作 o, 它的实体是由 C 类别不带参数的建构子产生的
所以应该帮忙题目再定义 C 类别有一个不带参数的建构子
接着这个 o 物件,被指定给另一个 S 类别的 p 物件
这时候就有趣了,所谓的指定 (那个等号) 是如何定义的
此时会是另一个程式语言的实作议题
不过看得出来最後那个 p 物件在执行期才会决定它的 f() 是什麽功能
所以我说 dynamic binding 绝对不会说错... (误)
: 以上 不知道对不对 XD
: 此外题目好像不是很完整.....S C的关系是?
--
※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 122.117.172.148