作者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 (
[email protected])
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
1F:→ Eventis:其实我不觉得那段code是c++,只是好像讨论的人都用c++..XD 04/02 02:35
2F:→ Eventis:只好写个c++的片段出来XD 04/02 02:36
3F:→ Eventis:因为一般导论课程应该都会跟着某一个OOP一起教才对:) 04/02 02:38
4F:推 Eventis:後来我想想我不该用pointer,应该用A& a = o的reference 04/10 08:11