アフィリエイト広告を利用しています

広告

posted by fanblog

2018年01月01日

《その215》 参照のクロスキャスト


《その215》 参照のクロスキャスト

 前々回《213》と前回《214》で扱ったクロスキャストは、ポインタがキャストの対象でした。
今回は、参照のクロスキャストについてです。

 とは言っても、ポインタのときと同じように dynamic_cast<>演算子を用いてキャストするので、前回《214》のプログラムの該当部分だけを書き換えたコードで確認することにします。
プログラムの説明は、前回《214》書いたので、今回は省略します。


 下のプログラムの赤文字の部分が変更箇所ですが、

for (int i = 0; i < 3; i++) {
B& r = dynamic_cast<B&>(*a[i]);
cout << r.fb() << " ";
}

だと、参照のクロスキャストをしている気がしない、というのであれば、

for (int i = 0; i < 3; i++) {
A& ref = *a[i];
B& r = dynamic_cast<B&>(ref);
cout << r.fb() << " ";
}

のように書き換えてみると、いいのではないかと思います。


// ------------------------------------
#include <iostream>
using namespace std;

class A {
public:
virtual int fa() = 0;
};

class B {
public:
virtual int fb() = 0;
};

class C : public A, public B {
int x;
int y;
public:
C(int s, int t) : x(s), y(t) { }
int fa() { return x + y; }
int fb() { return x - y; }
};

int main()
{
A* a[] = {
new C(20, 10),
new C(50, 30),
new C(66, 33),
};

for (int i = 0; i < 3; i++)
cout << (*a[i]).fa() << " ";
cout << '\n';

for (int i = 0; i < 3; i++) {
B& r = dynamic_cast<B&>(*a[i]);
cout << r.fb() << " ";

}
cout << '\n';

for (int i = 0; i < 3; i++)
delete a[i];
}
// ------------------------------------

f07_0007.png
出力結果は前回と同じです。


新版 明解C 入門編 (明解シリーズ)

新品価格
¥2,916から
(2017/11/10 13:13時点)

新版 明解C 中級編 (明解シリーズ)

新品価格
¥2,916から
(2017/11/10 13:14時点)





この記事へのコメント
コメントを書く

お名前:

メールアドレス:


ホームページアドレス:

コメント:

※ブログオーナーが承認したコメントのみ表示されます。

この記事へのトラックバックURL
https://fanblogs.jp/tb/7149467
※ブログオーナーが承認したトラックバックのみ表示されます。

この記事へのトラックバック

 たまに、クリック お願いします m(_ _)m

 AA にほんブログ村 IT技術ブログ C/C++へ

こうすけ:メール kousuke_cpp@outlook.jp

【1】★★C++ 記事目次★★ ← 利用可能です。
・新版明解C++入門編 / 新版明解C++中級編
・その他 C++ 関連記事

【2】★★こうすけ@C#★★
・C# の初歩的な記事


検索
<< 2018年08月 >>
      1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31  
プロフィール
こうすけさんの画像
こうすけ

 たまに、クリック お願いします m(_ _)m

 AA にほんブログ村 IT技術ブログ C/C++へ

こうすけ:メール kousuke_cpp@outlook.jp

【1】★★C++ 記事目次★★ ← 利用可能です。
・新版明解C++入門編 / 新版明解C++中級編
・その他 C++ 関連記事

【2】★★こうすけ@C#★★
・C# の初歩的な記事


×

この広告は30日以上新しい記事の更新がないブログに表示されております。