Re: [問題] 關於物件導向觀念的問題

看板OOAD作者 ( )時間16年前 (2008/04/01 17:17), 編輯推噓1(103)
留言4則, 1人參與, 最新討論串5/5 (看更多)
※ 引述《Eventis (何逸凡)》之銘言: : ※ 引述《awes6380 (明智)》之銘言: : : 一個子類別C裡定義了一個跟父類別S裡名稱一樣的function f() : : 此時有一個物件o定義如下: : : C o=new C(); : : S p=o; : : 此時p.f()和o.f()指的是同一個function,這種觀念稱為? : 只是路過看到,我想或許題目的意思是: : S 是一個有完整定義的class : C 繼承 S , 並且override f : 至於那段程式碼,指的只是類似下面這段code中,o和a的關係@@;;;; : (但是我想原來這段code應該是Java, : 因為那個assign用c++可以做的骯髒事太多了XD) 原本的 code 沒有 assignment, 那個 = 叫做 initializer, 在 C++ 中也是單參數 constructor 的另一種寫法。 你可以把那段 code 想成虛擬碼, 而通常泛 OO 用的虛擬碼裡, 習慣上預設所有 method 都是 dynamic binding, 轉成 C++ 角度來看就是通通預設成 virtual function, OO 領域常用的 UML 也是以此為前提。 : 不過說這題在選項前的那個敘述,目的應該是想把情況限制在override : 如果沒有E的話,當然答案是很好選啦. : 可是因為有E,反向思考的話,要讓p.f()跟o.f()指的是同一個function, : 也不見得只有override這一種狀況. : (這是找老師討分數的講法.....XD) 幫你改一下前面推文吐槽的 memory leak 問題 XD shared_ptr 有進 C++ TR1 了, 下一版標準應該就會編入 standard library。 這段到目前為止好像跟 OO 沒關係, 所以補個 OO 常識:現代的 C++ 主要以這方法實現 OO 裡的 aggregation 概念。 : #include <iostream> #include <boost/shared_ptr.hpp> : using namespace std; using namespace boost; : class A {public: virtual void foo() {cout << "a.foo" << endl;}}; : class B : public A {public: void foo() {cout << "b.foo" << endl;}}; int main() { shared_ptr<B> o(new B()); shared_ptr<A> a(o); shared_ptr<A> aa(new A()); : o->foo(); : a->foo(); : aa->foo(); : } -- Ling-hua Tseng (uranus@it.muds.net) Department of Computer Science, National Tsing-Hua University Interesting: C++, Compiler, PL/PD, OS, VM, Large-scale software design Researching: Software pipelining for VLIW architectures Homepage: https://it.muds.net/~uranus -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 61.230.230.201

04/02 02:35, , 1F
其實我不覺得那段code是c++,只是好像討論的人都用c++..XD
04/02 02:35, 1F

04/02 02:36, , 2F
只好寫個c++的片段出來XD
04/02 02:36, 2F

04/02 02:38, , 3F
因為一般導論課程應該都會跟著某一個OOP一起教才對:)
04/02 02:38, 3F

04/10 08:11, , 4F
後來我想想我不該用pointer,應該用A& a = o的reference
04/10 08:11, 4F
文章代碼(AID): #17yVstQT (OOAD)
文章代碼(AID): #17yVstQT (OOAD)