我的问题如下:
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”时的下一个问题是基对象不知道派生类的结构内有哪些变量.
有什么办法可以让我意识到这一点?我可以获得每个派生对象的不同属性但使用基类对象吗?