ぼく用あれこれまとめ
オーバーロードとオーバーライド
最終更新:
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=上書きするイメージ。上からのっかかる感じ。のしかかり、ラプラス。
- 仮想関数を含むインスタンスは、仮想関数テーブルを保持している。
- ちなみに通常のメンバ関数なら、インスタンス生成時に個々でそのメンバ関数を保持しない。
.