次のコードにはバグがあります: 最後の行は次のようになるはずです
bp->g();
. 問題は, その行をコメントアウトすると,bp->f()
実際には派生バージョンを呼び出す. したがって, コンパイラは bp を Derived クラスとして扱うと仮定します. 次に, g を呼び出すと, コンパイラはなぜBasebp
として扱います.ポインター。
ありがとう!
#include <iostream>
using namespace std;
class Base {
public:
virtual void f() const { cout << "Base::f()\n"<< endl; }
virtual void g() const { cout << "Base::g()\n"<< endl; }
};
class Derived : public Base {
public:
void f() const {cout << "Derived::f()" << endl; }
void g(int) const {cout << "Derived::g()" << endl; }
};
int main() {
Base* bp = new Derived;
bp->f();
bp->g(1);
}