ぼく用あれこれまとめ
オーバーロードとオーバーライド
最終更新:
bokuyo
-
view
オーバーロードとオーバーライド
よく頭の中でこんがらがるので整理しようかと。
オーバーロード(overload, 多重定義)
void Func(){ std::cout << "unco" << std::endl; } void Func(int x){ std::cout << x << std::endl; } void Func(double x){ std::cout << x << std::endl; } void Func(int x, int y){ std::cout << x + y << std::endl; }
- 引数の型や、引数の数が違う場合に使うのがオーバーロード(overload, 多重定義)。
- classのコンストラクタはオーバーロードし放題、デストラクタは多重定義できません。
- オーバーロードはほどほどに。
template <typename T> void Func(T x){ std::cout << x << std::endl; }
- templateを使うとすっきり書けちゃったり。
- 未知の型を示す「typename」は「class」に置き換えることができるといえばできるけど、おすすめはしない。
- コンパイラが型なのかclassなのかよくわからなくなっちゃうから、typenameとちゃんと明記しましょう。
オーバーライド(override, 上書き?)
class IUnco { public: virtual void Draw(); }; class Unpoco : public IUnco { public: void Draw(); }; void Unpoco::Draw(){ std::cout << "EurekaSeven" << std::endl; }
- 継承元で宣言されてる仮想関数を定義すること。
- override=上書きするイメージ。上からのっかかる感じ。のしかかり、ラプラス。
- 仮想関数を含むインスタンスは、仮想関数テーブルを保持している。
- ちなみに通常のメンバ関数なら、インスタンス生成時に個々でそのメンバ関数を保持しない。
.