В следующем коде у нас есть два класса в каждом из них два метода: один - виртуальный, а второй - не виртуальный. Я не понимаю, что на самом деле происходит, когда я запускаю этот код. В этом случае и с какой функцией (1,2,3) система использует витальную или не виртуальную функцию? Во всех случаях я писал в комментариях то, что я получил при запуске кода. Я немного запутанным ... Заранее спасибовиртуальный метод против не виртуального метода в том же классе
class cFather {
public:
void print() { cout<<” 1) cFather\n”;}
virtual void print() const { cout<<” 2) cFather\n”};
};
class cSon : public cFather {
public:
virtual void print() { cout<<” 3) der\n”; }
void print() const { cout<<” 4) der\n”; }
};
void function1 (const cFather& o)
{
o.print();
}
void function2 (const cFather o)
{
o.print();
}
void function3(cFather o)
{
o.print();
}
A)
void main ()
{ cFather o;
function3(o); }
// 1) CFather
B)
void main ()
{ cSon t;
function1(t); }
// 4) der
C)
void main ()
{ cFather * o;
cSon t;
o = &t;
o->print(); }
// 1) cFather
D)
void main ()
{ cFather o;
function2(o); }
// 2) cFather
Это не «единственная разница»; один - const, другой - нет. –
Какое поведение, в частности, вы не понимаете? –
Вы правы, я изменил его! – Laura