サブクラスを意識しないでアクセスする方法

[戻る]
六花 2004/10/13(水) 17:58:28
六花です。よろしくお願いします。質問ですが、スーパークラスをXとしそのサブクラスをXa
とXbとしたとして、振る舞いaの時はXaを振る舞いbの時はXbを利用したいのですが、常
に振る舞いがaかbかでif文で呼び分けるのではなくサブクラスがどちらかを意識しないでア
クセスしたいです(XaとXbは振る舞いによりオンリーワンで利用します)。生成時に1回意
識するだけにしたいです。
このようなアクセス方法をご存知でしたら教えて下さい。よろしくお願いします。
環境は.NET、VC++、アンマネージです。

επιστημη [E-Mail] [HomePage] 2004/10/13(水) 18:14:36
> スーパークラスをXとしそのサブクラスをXaとXbとしたとして、

class X { ... };
class Xa : public X { ... };
class Xb : public X { ... };

> 振る舞いaの時はXaを振る舞いbの時はXbを利用したいのですが、

…ここがわからん。

class Xa { public: void a() { ... } };
class Xb { public: void b() { ... } };
class Xab : public Xa, public Xb {};

Xab x;
x.a(); // Xa::a()
x.b(); // Xb::b()

… こーゆーコトですか?

REE 2004/10/13(水) 18:24:52
>…ここがわからん。

class X  { public: virtual void f()=0; };
class Xa { public: void f() { 振る舞いa } };
class Xb { public: void f() { 振る舞いb } };

X* x = new Xa;
x.f(); // Xa::f()

X* x = new Xb;
x.f(); // Xb::f()

単にこうだったりして・・

六花 2004/10/13(水) 18:38:58
[[解決]]
『単にこうだったりして・・』の振る舞いをさせたかったです。
スーパークラスのポインタを利用すればよいのですね。
サンプルを作り動作させたところ、期待通りに動きました。
有り難うございました。

REE 2004/10/13(水) 19:04:53
訂正です。
>x.f();
x->f(); 

スーパークラスのデストラクタをvirtualにするのをお忘れなく・・

επιστημη 2004/10/13(水) 22:16:53
激しく脱力。

PATIO 2004/10/14(木) 11:22:29
うーん、C++の入門書を読んでほしい気がするなぁ。
これってC++の肝だと思うのだけれど。

古いスレッドには追加発言できません。