#include <iostream>
using namespace std;
class base
{
public:
void f() {cout << "base" << endl;}
virtual void v() {cout << "base (virtual)" << endl;}
};
class deriv : public base
{
public:
void f() {cout << "deriv" << endl;}
void v() {cout << "deriv (overridden)" << endl;}
};
int main()
{
base b;
b.f();
b.v();
deriv d;
d.f();
d.v();
}
Я не понимаю, в чем реальная разница между этими двумя методами f и v: если я заменяю функцию другой с тем же именем, я не "заменяю" ее? Даже если я все еще могу получить к нему доступ, создав указатель base * и затем указав на него производный объект, я не понимаю, какое здесь «чистое» использование C ++.
Когда не используются виртуальные (то есть переопределяемые методы) методы, может кто-нибудь сказать мне, есть ли законное использование для этого, и чем отличается использование переопределенного виртуального метода?
РЕДАКТИРОВАТЬ: Я извиняюсь за использование плохого синтаксиса с уценкой, но уценка действительно плохой выбор, она сложная и довольно капризная (я предпочитаю текстильный хе-хе).
РЕДАКТИРОВАТЬ 2: Извините, я не догадался, что кнопка 101010101010101 предназначена для вставки кода, я обычно просто делаю это вручную: (