サンプル

class Base {
public:
void fnc();
};

class Derived: public Base {
public:
void fnc(){}
};

int main(){
Derived d;

Base *basePtr = &d;
Derived *derivedPtr = &d;

basePtr->fnc();//Base::fnc() を呼び出します
derivedPtr->fnc();  //Derived::fnc() を呼び出します

return 0;
}

ソリューション
非仮想関数をオーバーライドしないでください。 基本クラスを使用しないように設計を変更するか、ポリモアフィックな振る舞いになるように、基本クラス関数を virtual にします。


class Base {
public:
virtual void fnc();
};

class Derived: public Base {
public:
void fnc(){}
};

int main(){
Derived d;

Base *basePtr = &d;
Derived *derivedPtr = &d;

basePtr->fnc();// 
Derived::fnc() の呼び出し
derivedPtr->fnc();  // Derived::fnc() の呼び出し

return 0;
}