ぼく用あれこれまとめ

オーバーロードとオーバーライド

最終更新:

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=上書きするイメージ。上からのっかかる感じ。のしかかり、ラプラス。
  • 仮想関数を含むインスタンスは、仮想関数テーブルを保持している。
  • ちなみに通常のメンバ関数なら、インスタンス生成時に個々でそのメンバ関数を保持しない。


.
記事メニュー
目安箱バナー