C++ 基本多态性

C++ 基本多态性,c++,polymorphism,C++,Polymorphism,我有两个结构: struct X { double x; }; struct Y : X { double y; }; 我想要一个充满基本对象(类型X)的向量,它可能可以扩展(到类型Y的对象): std::向量向量向量机; 如果(条件) { 对于(尺寸i=0;ix=。。。; vec[i]>y=…;//错误 } } 其他的 { 对于(尺寸i=0;ix=。。。; } } 这会出现错误“X”中没有名为“y”的成员。您知道我如何实现我的愿望吗?到目前为止您发布的代码的快速解决方案。更改 vec.p

我有两个结构:

struct X { double x; };

struct Y : X { double y; };
我想要一个充满基本对象(类型X)的向量,它可能可以扩展(到类型Y的对象):

std::向量向量向量机;
如果(条件)
{
对于(尺寸i=0;ix=。。。;
vec[i]>y=…;//错误
}
}
其他的
{
对于(尺寸i=0;ix=。。。;
}
}

这会出现错误“X”中没有名为“y”的成员。您知道我如何实现我的愿望吗?

到目前为止您发布的代码的快速解决方案。更改

vec.push_back(new Y);
vec[i]->x = ...;
vec[i]->y = ...; // error

但在读回对象以访问仅包含在Y中的成员变量时,仍然需要X*到Y*的强制转换

if(condition)
    cout << static_cast<Y*>(vec[i])->y;
if(条件)
库蒂;
除了强制转换,您还可以为X和Y创建单独的向量(如果它们只包含一种类型,则不必是指针,也可以是指针),只需填充并访问其中一种

vector<X> vecX;
vector<Y> vecY;
bool condition;
vectorvecx;
向量向量;
布尔条件;

多态性通常用于行为。看起来您可能需要组合。请将
double y;
y
移动到
X
直接的问题是代码存储
X*
。它无法通过该指针访问
y
成员。因此保留实际类型:
y*ptr=new y;ptr->y=…;vex.push_back(ptr);
@AdrianMole-
动态强制转换
将不起作用,除非基类型有一个或多个虚拟函数。@AdrianMole-yes
静态强制转换
将起作用,如果您知道
X*
实际上指向类型为
Y
的对象。
if(condition)
    cout << static_cast<Y*>(vec[i])->y;
vector<X> vecX;
vector<Y> vecY;
bool condition;