C++のvirtualとoverride
C++では仮想関数を定義するときにvirtual修飾子をつけます
code:sample.cpp
class Test {
virtual void func() {
cout << "test" << endl;
}
};
virtual をつけることで継承先でオーバーライドすることができるようになります
継承先でオーバーライドするには overrideをつけます
つけなくてもされます(諸説あり)が、明示的に示しておきましょう
code:sample.cpp
class Test {
virtual void func() {
cout << "test" << endl;
}
};
class SubTest : public Test {
void func() override {
cout << "sub test" << endl;
}
};
また、C++ には抽象クラスは存在しません.ので普通の virtual 関数ではオーバーライドを強制させるようなことはできません
オーバーライドを強制させるためには virtual 修飾子に加えて関数に 0 を代入するような表記をします
code:sample.cpp
class Test {
virtual void func() = 0;
};
class SubTest : public Test {
void func() override {
cout << "sub test" << endl;
}
};
こうすることでオーバーライドしない場合にエラーを起こしてくれます
これでオブジェクト指向ができるようになりました
オーバーライドについてyuusuine.icon「へー」と思ったことを書いておきます
code:sample.cpp
class Test {
public:
virtual void func() {
cout << "class Test" << endl;
}
void func_2() {
this->func();
}
};
class SubTest : public Test {
public:
void func() override {
cout << "class SubTest" << endl;
}
};
int main(void) {
SubTest* sub_test = new SubTest();
sub_test->func();
}
この場合に出力されるのは
class SubTest
です
継承元クラスでデフォルトの振る舞いを定義して継承先で変更したい場合にオーバーライドするなんて使い方ができるようになります.