作者tinlans ( )
看板OOAD
標題Re: [問題] 關於物件導向觀念的問題
時間Tue Apr 1 17:17:39 2008
※ 引述《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
→ Eventis:其實我不覺得那段code是c++,只是好像討論的人都用c++..XD 04/02 02:35
→ Eventis:只好寫個c++的片段出來XD 04/02 02:36
→ Eventis:因為一般導論課程應該都會跟著某一個OOP一起教才對:) 04/02 02:38
推 Eventis:後來我想想我不該用pointer,應該用A& a = o的reference 04/10 08:11