はじめに
C++にはoverrideというキーワードがあります。
このoverrideキーワードの使い方、有用性についてご紹介します。
overrideキーワードの使い方
overrideキーワードは、派生クラスで仮想関数をオーバーライドする際に使用できます。
以下のコードは、overrideキーワードを使用した例です。
#include <iostream>
class Base {
public:
virtual ~Base() = default;
virtual void display() const {
std::cout << "Base display" << std::endl;
}
};
class Derived : public Base {
public:
void display() const override {
std::cout << "Derived display" << std::endl;
}
};
int main() {
std::unique_ptr<Base> basePtr = std::make_unique<Derived>();
basePtr->display(); // "Derived display" が出力される
}
overrideキーワードの有用性
overrideキーワードを使わなくてもコンパイルは通りますが、使うとさまざまな利点があります。
1. タイプミスの防止
overrideキーワードを使用すると、関数名のタイプミスやシグネチャの違いによってオーバーライドされていない場合に、コンパイラはエラーを報告します。
例えば、先ほどのコードを以下のように変更します。
class Derived : public Base {
public:
void disply() const override { // タイプミス
std::cout << "Derived display" << std::endl;
}
};
この場合、displyという関数名はBaseクラスのdisplay関数をオーバーライドしていないため、コンパイラはエラーを報告します。
これにより、オーバーライドされていない問題を早期に発見することができます。
2. 将来の変更に対する安全性
基底クラスの仮想関数のシグネチャが変更された場合、overrideキーワードを使用していると、変更していない派生クラスのオーバーライド関数がコンパイルエラーとなります。
これにより変更が必要な箇所を見逃すことなく修正することができます。
class Base {
public:
virtual ~Base() = default;
virtual void display(int value) const {
std::cout << "Base display: " << value << std::endl;
}
};
class Derived : public Base {
public:
void display() const override { // コンパイルエラー
std::cout << "Derived display" << std::endl;
}
};
3. コードの可読性向上
overrideキーワードを使用することでコードの可読性が向上します。
コードを読む人に対して、この関数が基底クラスの仮想関数をオーバーライドしていることを明示的に示すことができます。
これにより、コードの意図がより明確になり理解しやすくなります。
まとめ
C++のoverrideキーワードは、タイプミスの防止、将来の変更に対する安全性の向上、コードの可読性向上といったさまざまな利点があります。
overrideキーワードを使用することでより安全でメンテナンスしやすいコードを書くことができます。