オーバーライド

override.png

定義

スーパークラスで定義されたメソッドをサブクラスで定義しなおし、動作を上書きすること
つまり、何も考えずにオーバーライドしたら、親クラスで定義されたメソッドは一切呼ばれないということ。
基底クラスバージョンの仮想関数上書きすること。
オーバーロードとは違うので注意!オーバーロードは、同じクラスの中で、同じ名前の関数だけど引数の数が違うヤツのことを言う。
java c++
親クラス いつでも可能1 virtual修飾子をつけないとだめ

オーバーライド関数の書き方

Java @Override
Swift override
Objective-C @implementation 親クラス名
C++ なし。定義の方にvirtual C++からはoveride修飾子が出来た

親クラスを呼び出すとき

C++の場合

CParent::method();

C++11のoverride修飾子で正しくオーバーライドできていない関数をコンパイルエラーにする

class Parent
{
public:
    virtual ~Parent() {}
    void method() {f();}
 
private:
    virtual void f() {}
};
 
class Child : public Parent
{
public:
    void f(int arg) override//<-ここに書く
    {
 
    }
};

上の例の場合、関数名は同じだけど親クラスと子クラスで引数の数が違うので
正しくoverrideできていないとしてコンパイルエラーになります。
親クラスの関数仕様を変えてもコンパイルエラーを教えてくれて便利!

cpp11

サポートサイト Wikidot.com cpp11