это то я уже 3 раза писал
меня интересует как внутри B, виртуальную функцию ff определить или если это невозможно объявить
при наличии в:
class a {
virtual A* ff(A*);
};
...
#include <iostream>
using std::cin;
using std::cout;
using std::endl;
struct A {
char ca;
};
struct B : public A {
char cb;
};
B bb;
A aa;
class a {
public:
virtual A* ff(A*) { cout<<"a"<<endl; return &aa; }
};
class b : public a {
public:
//virtual B* ff(B*) { cout<<"b"<<endl; return &bb; }
virtual A* ff(A*) { cout<<"b"<<endl; return &aa; }
};
a* factory(char c ) {
if (c=='a') return new a();
return new b();
}
int main()
{
a* pa=factory('a');
pa->ff(&aa);
pa=factory('c');
pa->ff(&aa);
pa->ff(&bb);
cout<<"hello virtual arg"<<endl;
}
при virtual B* ff(B*) { cout<<"b"<<endl; return &bb; }
у меня 3 раза a:ff вызывается
...
class b : public a {
public:
virtual B* ff(A*) { cout<<"b"<<endl; return &bb; }
};
так вроде бы перебрал все доступные варианты, компилятор не дает ни в какую подменить аргументы функции ( вернее нае.. обманывает созданием еще 1й виртуальной функции ), единственное чего удалось достичь - это подменить тип возвращаемого значения, но я еще не проверил действительно ли возвращается B*, а не A*