どっちかわからなくなっちゃう用語の話 - オーバーロード・オーバーライド

 
1. オーバーロード
2. オーバーライド
3. 蛇足

1. オーバーロード

 個人的な話をすれば、オーバーロード (overload) はよく使いますが、オーバーライド (override) はあんまり使わないかなぁ。  同レベル・同名のメソッドや関数で、引数の個数や型、戻り値の型等を変えるのがオーバーロードです。

2. オーバーライド

 継承したクラスで元となるスーパークラスの同名のメソッドを派生クラスで定義して独自の機能で上書するのがオーバーライドです。この場合、引数の数・型が同じでなければなりません。  C# だと予約語に、ずばり「override」ってのが用意されているのでいいですね。

3. 蛇足

 前項までが龍でもないが・・・。  オーバーロードを例示すれば

#include <stdio.h>

class myClass
{
public:
    myClass();
    virtual ~myClass();

    void method(const char* name);
    void method(const char* name, const int yearsold);
};

int main(int argc, char *argv[])
{
    myClass c;

    c.method("太郎");
    c.method("太郎", 12);

    return 0;
}

myClass::myClass()
{
}

myClass::~myClass()
{
}

void myClass::method(const char* name)
{
    printf("僕の名前は %s です。\n", name);
}

void myClass::method(const char* name, const int yearsold)
{
    printf("僕の名前は %s で %d 歳です。\n", name, yearsold);
}
 これを実行すると以下の出力になります。

僕の名前は 太郎 です。
僕の名前は 太郎 で 12 歳です。
 オーバーライドを例示すれば

#include <stdio.h>

class suClass
{
public:
    suClass();
    virtual ~suClass();

    void method(const char* name);
};

class myClass : public suClass
{
public:
    myClass();
    virtual ~myClass();

    void method(const char* name);
};

int main(int argc, char *argv[])
{
    myClass c;

    c.method("太郎");

    return 0;
}

suClass::suClass()
{
}

suClass::~suClass()
{
}

void suClass::method(const char* name)
{
    printf("僕の名前はスーパー %s です。\n", name);
}

myClass::myClass()
{
}

myClass::~myClass()
{
}

void myClass::method(const char* name)
{
    printf("僕の名前は派生 %s です。\n", name);
}
 これを実行すると以下の出力になります。

僕の名前は派生 太郎 です。