есть два класса в родительском опрелена функция, возвращает тип дабл
а в потомке хочется получить флоат
это не компилится в VС++ почему
ведь "В сигнатуру включается модификатор const, но не включается возвращаемое значение"
почему??
class CParent
{
public:
CParent(){};
virtual ~CParent(){};
virtual double GetF()
{
return 1;
};
};
class CChilde:public CParent
{
public:
CChilde(){};
virtual ~CChilde(){};
float GetF()
{
return 2;
};
};
Здравствуйте Bai, Вы писали:
А причем тут сигнатура ф-ии. Как уже правильно сказали ввозвращаемый тип переопределяемой ф-ии должен совпадать или быть ковариантным, т.е.
struct A
{
virtual double func() { return 0; }
virtual const A* getOb() { return this; }
};
struct B : public A
{
//virtual float func() {} //Error
virtual const B* getOb() { return this; }
};
Заметь ф-я getOb() виртуальная, однако возвращает разные типы. Это допускается cтандартом, но это не будет у тебя компилится в VC6, но в VC7 этот баг уже исправлен и все чудно компилится.