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

広告

posted by fanblog

2018年02月02日

《その271》 参照・ポインタ渡し と オブジェクトの動的な型


 参照・ポインタ渡し と オブジェクトの動的な型(復習)

【 プログラムの概略 】

 足し算用の仮想関数をメンバにもつ基底クラス
   add
add からの pubulic派生クラス
   ave(平均計算用)
   mul(掛け算用)
   sub(引き算用)
があります。
各クラスのオブジェクトを生成して、それらのオブジェクト(オブジェクトのコピー や 動的に生成したオブジェクト も含みます)を、関数 func1, func2 に渡しています。
   関数 func1 はオブジェクトへの参照を受け取り、
   関数 func2 はオブジェクトを指すポインタを受け取ります。

それぞれの場合の計算結果から、動的な型が使われたかどうかを判断することができます。
※【1】〜【3】では、動的な型が使われています。

 以下がプログラムです。

#include <iostream>
using namespace std;

// 基底クラス add(足し算用のクラス)
class add {
public:
virtual double cal(double x, double y) {
return x + y;
}
};

// public派生クラス ave(平均計算用のクラス)
class ave : public add {
public:
double cal(double x, double y) {
return (x + y) / 2;
}
};

// public派生クラス mul(掛け算用のクラス)
class mul : public add {
public:
double cal(double x, double y) {
return x * y;
}
};

// public派生クラス sub(引き算用のクラス)
class sub : public add{
public:
double cal(double x, double y) {
return x - y;
}
};

// add型オブジェクトへの参照を受け取る。
void func1(double x, double y, add& r) {
std::cout << "・計算結果は "
<< r.cal(x, y) << " です。\n";
}

// add型オブジェクトを指すポインタを受け取る。
void func2(double x, double y, add* p) {
std::cout << "・計算結果は "
<< p->cal(x, y) << " です。\n";
}


int main() {
// 各型のオブジェクトを生成
add c0; ave c1; mul c2; sub c3;

add* c[] = { &c0, &c1, &c2, &c3 };

cout << "【1】add型オブジェクトへの参照 "
"*c[i] を参照渡し\n";
for (int i = 0; i < 4; i++)
func1(3.5, 2.4, *c[i]);
std::cout << '\n';

cout << "【2】add型オブジェクトを指すポ"
"インタ c[i] をポインタ渡し\n";
for (int i = 0; i < 4; i++)
func2(3.5, 2.4, c[i]);
std::cout << '\n';

// 各型のオブジェクトを動的に生成
add* p[] = {
new add,
new ave,
new mul,
new sub
};


cout << "【3】動的に生成した add型オブ"
"ジェクトを指すポインタ p[i] を"
"ポインタ渡し\n";
for (int i = 0; i < 4; i++)
func2(3.5, 2.4, p[i]);
delete[] * p;
std::cout << '\n';

add a[] = { c0, c1, c2, c3 };

cout << "【4】add型オブジェクトのコピ"
"ー a[i] を参照渡し\n";
for (int i = 0; i < 4; i++)
func1(3.5, 2.4, a[i]);
std::cout << '\n';

cout << "【5】add型オブジェクトのコピ"
"ー a[i] のアドレスをポインタ渡"
"し\n";
for (int i = 0; i < 4; i++)
func2(3.5, 2.4, &a[i]);
}

f09_0071.png



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

お名前:

メールアドレス:


ホームページアドレス:

コメント:

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

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

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

 たまに、クリック お願いします 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日以上新しい記事の更新がないブログに表示されております。