派生クラスによる関数の隠蔽
スポンサーリンク
スポンサーリンク
ライフスタイル関連のコンテンツ
お金 | 仕事 | 勉強 | プライベート | 健康 | 心
プログラミング関連のコンテンツ
C言語/C++入門 | Ruby入門 | Python入門 | プログラミング全般
お金 | 仕事 | 勉強 | プライベート | 健康 | 心
プログラミング関連のコンテンツ
C言語/C++入門 | Ruby入門 | Python入門 | プログラミング全般
派生クラスで隠蔽される関数の例を見てみます。
スポンサーリンク
#include <iostream> class parent { public: int calc(int a, int b) { return (a + b); } float calc(float c, float d) { return (c * d); } // オーバーロード }; class child : public parent { public: int calc(int a, int b) { return (a - b); } // オーバーライド }; int main() { child test; std::cout << test.calc(10, 5) << "\n"; // 5を返す std::cout << test.calc(5.6, 3) << "\n"; // 正しくない結果(2)を返す }
仮想関数・virtualキーワードで説明しましたが、派生クラスをインスタンス化した場合、メンバは「派生クラス→基底クラス」と検索されます。
上記プログラムの場合、親クラスparentでメンバ関数calc()をオーバーロードしていますが、子クラスchildで、calc()をオーバーライドしています。
したがって、childをインスタンス化してメンバ関数calc()を呼び出すと、子クラスchildのcalc()のみが呼び出されて、親クラスのcalc()は排除(隠蔽)されます。
よって、実行結果は、float型による計算は行われずに、5.6がint型(整数)の5に変換されて、5-2が行われました。
実行結果。
5 2
スポンサーリンク
>> 次の記事 : 派生クラスのコンストラクタ・デストラクタ
<< 前の記事 : 仮想クラス
- - 関連記事 -
- 派生クラスのコンストラクタ・デストラクタ
- 仮想クラス
- 抽象クラス
- 仮想関数・virtualキーワード
- 親クラスの引数ありコンストラクタを子クラスから初期化・動的サイズのスタック
- クラスのアクセス制限キーワード・private, protected, public
- スタックを実装したクラスを拡張する
- クラス継承・親クラスと子クラス
- static・静的メンバ関数
- static・静的メンバ変数
- 定数のconstメンバ関数をクラスに宣言
- 定数のconstメンバ変数をクラスに宣言
- フレンドクラス・friend
- フレンド関数・friend
- クラスの中にメンバ関数(メソッド)を実装する
- explicit・コンストラクタを明示する
- クラスで自動的に生成されるメンバ関数
- コピーコンストラクタ
- 引数つきのコンストラクタを持つクラス定義
- コンストラクタで自動的に初期化する
スポンサーリンク