Re: [問題] 關於物件導向觀念的問題
※ 引述《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
04/02 02:35, 1F
→
04/02 02:36, , 2F
04/02 02:36, 2F
→
04/02 02:38, , 3F
04/02 02:38, 3F
推
04/10 08:11, , 4F
04/10 08:11, 4F
討論串 (同標題文章)
OOAD 近期熱門文章
PTT數位生活區 即時熱門文章
-4
30