Моя проблема заключается в следующем:
int main()
{
Base* derivedobject = new Derived1();
derivedobject->GetProperties()-> ???
return 0;
}
//********************
// BaseClass.h
//********************
struct PropertyStruct
{
int x;
};
class Base
{
public:
Base();
~Base();
virtual PropertyStruct GetProperties() = 0;
private:
};
//********************
// DerivedClass1.h
//********************
struct PropertyStruct
{
int y;
};
class Derived1 : public Base
{
public:
Derived1();
~Derived1();
PropertyStruct GetProperties() { return myOwnDifferentProperties; };
private:
};
//********************
// DerivedClass2.h
//********************
struct PropertyStruct
{
float z;
};
class Derived2 : public Base
{
public:
Derived2();
~Derived2();
PropertyStruct GetProperties() { return myOwnDifferentProperties };
private:
};
Если я сделаю это так, я получу сообщение об ошибке, говорящее о том, что PropertyStruct является переопределением. Если я использую пространство имен или переименовываю структуру внутри производного класса, я получаю сообщение об ошибке, сообщающее мне, что возвращаемый тип не совпадает с тем, что определен в Base. Если я определяю возвращаемый тип виртуальных функций как указатель, он компилируется, хотя следующая проблема при доступе к функции «GetProperties» из основного метода (в этом примере) базовый объект не знает, какие переменные находятся внутри структуры производного класса .
Могу ли я как-то это осознать? Что я могу получить различные свойства каждого производного объекта, но используя объект базового класса?
PropertyStruct
с разными именами. - person iammilind   schedule 26.07.2012