#include <iostream>
using namespace std;
struct A
{
    virtual int func(void) { return 0; }
};
struct B : A
{
    int func(void) { return 1; }
};
int main()
{
    A b = B();
    cout << b.func() << endl;
}
I was expecting the output to be 1 but as most of you will know its 0. 
what i want to achieve in my actual code is something along these lines.
struct A
{
     virtual int operator() (int i);
};
struct B : A
{
     int operator() (int i) { return i*2; }
};
struct C : A
{
     int operator() (int i) { return i*3; }
};
struct x
{
     A test;
};
So my container won't be able to tell before hand if it will hold a A, B or C, but should behave differently still.
Is there a way to achieve the functionality as I anticipated it work??
 
     
    