Припустимо, що ми хочемо досягти різної поведінки функції print() для об'єктів різних класів. Для цього її досить перевизначити в класі-нащадку. Якщо ім'я функції і її прототип в класі-нащадку спідпадають з іменем і протопитом батьківської функції, то говорять, що метод похідного класу "приховує" метод батьківського класу. Щоб викликати метод батьківського класу, треба вказувати його з кваліфікатором класу. Крім того, що функцію можна перевизначити (з іншим тілом), її також можна перезавантажити з іншим списком аргументів.
#include <iostream.h>
#include <conio.h>
class Base //базовий клас
{
public:
void print();
};
void Base::print()
{
cout<<endl<<"Base-print"<<endl; // базовий метод
}
class Derive:public Base // похідний клас
{
public:
void print();
};
void Derive::print()
{
cout<<endl<<"Derive-print"<<endl; // перевизначений метод
}
int main(int argc, char* argv[])
{
Base X; // об'єкт базового класу
Derive Y; // об'єкт похідного класу
X.print(); // виклик базового методу
Y.print(); // виклик похідного методу
cout<<endl;
Y.Base::print(); // виклик прихованого базового методу через кваліфікатор класу
getch();
return 0;
}