【发布时间】:2012-07-25 05:56:25
【问题描述】:
我的问题如下:
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之间建立base-derived关系。
标签: c++ inheritance polymorphism derived