You do not override method1with the appropriate parameters so that it continues to be called method1in the class Item.
Item * a[2];
*a[0] *a[1] Item. :
a[0]->method1(*a[0], *a[0]);
a[0]->method1(*a[1], *a[0]);
a[0]->method1(*a[0], *a[1]);
method1(Type,Type), Base Item.
same parameters , .
, :
#include <stdio.h>
#include <stdlib.h>
#include <iostream>
using namespace std;
struct Item {
Item(){}
virtual void method1 (Item x, Item y) {cout << "Item Item\n";}
virtual void method2 (Item x, Item y) {cout << "Item Item\n";}
virtual void method3 (Item x, Item y) {cout << "Item Item\n";}
};
struct A : public Item {
A(){}
};
struct B : public Item {
B(){}
virtual void method1 (Item x, Item y) {cout << "B B\n";}
virtual void method2 (Item x, Item y) {cout << "A B\n";}
virtual void method3 (Item x, Item y) {cout << "B A\n";}
};
int main ( void )
{
Item * a[2];
a[0] = new B; a[1] = new A;
a[0]->method1(*a[0], *a[0]);
a[0]->method2(*a[1], *a[0]);
a[0]->method3(*a[0], *a[1]);
}
:
output:
B B
A B
B A
1() , method2() & method3() ` Child, , , , .