C++ 是否可以指定基类';s结构到dervied类';s结构
我有一个以struct作为成员的类A和另一个继承类A的类B,类B的struct继承类A的structC++ 是否可以指定基类';s结构到dervied类';s结构,c++,struct,instantiation,C++,Struct,Instantiation,我有一个以struct作为成员的类A和另一个继承类A的类B,类B的struct继承类A的struct class A { public: struct st { int x; int y; }; }; class B : public A { public: struct st : A::st { int z; }; }; 下面的代码给了我一个错误:做这件事的方法是什么 B::st* obj =
class A
{
public:
struct st
{
int x;
int y;
};
};
class B : public A
{
public:
struct st : A::st
{
int z;
};
};
下面的代码给了我一个错误:做这件事的方法是什么
B::st* obj = NULL;
obj = new A::st [10];
您尝试的是错误的,因为
B::st
是A::st
的子类型。因此,指向a::st
的指针无法自动转换为B::st
类型的指针
出于同样的原因,您不能使用:
B* bPtr = new A;
你可以反过来做
A::st* obj = NULL;
obj = new B::st; // Don't use the array new. That is going to be problematic.
您尝试的是错误的,因为
B::st
是A::st
的子类型。因此,指向a::st
的指针无法自动转换为B::st
类型的指针
出于同样的原因,您不能使用:
B* bPtr = new A;
你可以反过来做
A::st* obj = NULL;
obj = new B::st; // Don't use the array new. That is going to be problematic.
您可以执行相反的操作,即创建一个新的B对象并将其指定给a对象(在这种情况下,您只能看到特定于a的字段)。当你把一个A对象分配给一个B对象时,B对象是无效的(除非你重载了赋值操作符来做一些有效的事情),因为B特定的字段是未知的。我的意思是在这样一个分配之后z的值应该是什么?这相当于
A::st A[10];B::st*obj=a代码>。即使您反转转换,使其进行类型检查–B::stb[10];A::st*A=b代码>–这将是错误的。您可以执行相反的操作,即创建一个新的B对象并将其分配给a对象(在这种情况下,您只能看到特定于a的字段)。当你把一个A对象分配给一个B对象时,B对象是无效的(除非你重载了赋值操作符来做一些有效的事情),因为B特定的字段是未知的。我的意思是在这样一个分配之后z的值应该是什么?这相当于A::st A[10];B::st*obj=a代码>。即使您反转转换,使其进行类型检查–B::stb[10];A::st*A=b
–这将是错误的。如果要使用数组,请使用B::st*
而不是A::st*
。如果要使用数组,请使用B::st*
而不是A::st*
。