MENU
おすすめプログラミングスクール紹介用バナー
Webpia編集部
Webpiaはプログラミングとノーコードについて紹介するWebメディアです。主に10~30代向けに記事を執筆しております。

【図解】オーバーライドとオーバーロードの違いは?

当サイトはページの一部でPR活動を実施し、得られた収益で運営されています。広告費用や収益性を考慮したランキング付けは、一切行なっておりません。詳細は、サイトポリシーWebpiaでコンテンツが出来上がるまでを参照ください。

こんにちは。大学のテストでオーバーライドとオーバーロードが違うものだと知った今井(@ima_maru)です。

今回は、オーバーライドとオーバーロードが別物ということをわかっていただくために、オーバーライドとオーバーロードの違いについて簡潔に解説します。

この記事のポイント!

オーバーライド ≠ オーバーロード
まったくの別物だよ

もくじ

オーバーライドとオーバーロードの違い

この2つは2文字違いという、とても似たような名前がついているややこしいものですが、機能は違います。

オーバーライド(override)とは

オーバーライドとは日本語に訳せば「オーバー(上に)ライド(乗る)」「上書きする」という意味になります。

何かの上に乗るイメージです。

こちらは、継承と深く関わりのある機能です。

#include <iostream>
using namespace std;

class SuperClass {
public:
	void print() { cout << "親クラスだよ!" << endl; }
	void hoge() {}
	void foo() {}
};

class SubClass : public SuperClass {
public:
	/*オーバーライド*/
	void print() { cout << "子クラスだよ!" << endl; }
};

int main() {
	//親クラス
	SuperClass superClass;
	superClass.print();

	//子クラス
	SubClass subClass;
	subClass.print();
}
//実行結果
親クラスだよ!
子クラスだよ!

このように、継承先のクラスで継承したくない、もしくは内容を変えたい関数を再定義できるのがオーバーライドです。

オーバーライドのイメージは、「親子関係に成り立つ」です。

オーバーロードoverload)とは

オーバーロードとは日本語に訳せば「オーバー(上に)ロード(読みこむ)」という意味になります。

メンバメソッドを同じ名前で複数定義できる機能です。

こちらは上書きとは違い、同じもの(構造が違うが名前が同じもの)が同じ土台に複数存在しているイメージです。

#include <iostream>
using namespace std;

class Hoge {
public:
	void print()         { cout << "何も渡されなかったよ" << endl; }
	void print(int n)    { cout << "int型が渡されたよ" << endl; }
	void print(double n) { cout << "double型が渡されたよ" << endl; }
};

int main() {
	Hoge hoge;
	hoge.print();    //引数なし
	hoge.print(3);   //int型
	hoge.print(3.5); //double型
}
//実行結果
何も渡されなかったよ
int型が渡されたよ
double型が渡されたよ

このように、同じクラス内で同名の関数を複数定義できるのがオーバーロードです。

オーバーライドと違いオーバーロードのイメージは「同じ土台(クラス)に成り立つ」です。

よかったらシェアしてね!
もくじ