以下代码存在一个错误:最后一行应该是
问题是,如果我注释掉那行,
bp->g();
问题是,如果我注释掉那行,
bp->f()
实际上调用的是 Derived 版本,所以我假设编译器将 bp 视为 Derived 类型,那么为什么在调用 g 时,编译器将 bp
视为基类指针。
谢谢!#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);
}
void g(int ??)
缺少变量名。 - Grijesh ChauhanBase
的指针调用Base
的公共接口中的方法,但是这些调用会分派到派生类型。 - juanchopanza