サブクラスを意識しないでアクセスする方法 – プログラミング – Home

サブクラスを意識しないでアクセスする方...
 
通知
すべてクリア

[解決済] サブクラスを意識しないでアクセスする方法


六花
 六花
(@六花)
ゲスト
結合: 20年前
投稿: 2
Topic starter  

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


引用未解決
トピックタグ
επιστημη
 επιστημη
(@επιστημη)
ゲスト
結合: 21年前
投稿: 600
 

> スーパークラスを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
 REE
(@REE)
ゲスト
結合: 23年前
投稿: 240
 

>…ここがわからん。

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()

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


返信引用
六花
 六花
(@六花)
ゲスト
結合: 20年前
投稿: 2
Topic starter  

『単にこうだったりして・・』の振る舞いをさせたかったです。
スーパークラスのポインタを利用すればよいのですね。
サンプルを作り動作させたところ、期待通りに動きました。
有り難うございました。


返信引用
REE
 REE
(@REE)
ゲスト
結合: 23年前
投稿: 240
 

訂正です。
>x.f();
x->f();

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


返信引用
επιστημη
 επιστημη
(@επιστημη)
ゲスト
結合: 22年前
投稿: 1301
 

激しく脱力。


返信引用
PATIO
(@patio)
Famed Member
結合: 3年前
投稿: 2660
 

うーん、C++の入門書を読んでほしい気がするなぁ。
これってC++の肝だと思うのだけれど。


返信引用

返信する

投稿者名

投稿者メールアドレス

タイトル *

プレビュー 0リビジョン 保存しました
共有:
タイトルとURLをコピーしました