我有一个基类A和一个派生类B。
class A {
public:
int x;
virtual int getX() {
return x;
}
};
class B : public A {
public:
int y;
};
Run Code Online (Sandbox Code Playgroud)
虚函数只是为了使其具有多态性。接下来,我声明“”的列表,A但将B“”放入其中:
vector<A> list;
B b1,b2;
b1.y = 2;
b2.x = 10;
list.push_back(b1);
list.push_back(b2);
Run Code Online (Sandbox Code Playgroud)
现在我想遍历向量上的所有元素并访问y成员(只有成员B):
for (auto it = list.begin(); it != list.end(); ++it) {
B &cast = dynamic_cast<B&>(*it);
int value = cast.y;
std::cout << value << std::endl;
}
Run Code Online (Sandbox Code Playgroud)
此代码给出了运行时错误。知道我该如何进行投射和访问y吗?
我有以下地图:
my %cps_per_level = (
Bronze => [100 , 65 ],
Silver => [200 , 125 ],
Gold => [400 , 250 ],
Platinum => [800 , 500 ],
Diamond => [1200, 750 ],
Master => [2000, 1200],
Grandmaster => [3000, 1750],
);
Run Code Online (Sandbox Code Playgroud)
在我的代码中,我希望获得特定条目的列表的两个值到2个变量.我的第一次尝试是取消引用特定条目的列表,然后应用列表切片并将其分配给我想要的变量,如下所示.这里$level有一张地图的关键字.
my ($cps_before, $cps_after) = $cps_per_level{$level}[0,1];
Run Code Online (Sandbox Code Playgroud)
但这不起作用.$cps_before获取列表的第一个值,但$cps_after什么也得不到.我设法通过写两行来使它工作:
my $cps_before= $cps_per_level{$level}[0];
my $cps_after = $cps_per_level{$level}[1];
Run Code Online (Sandbox Code Playgroud)
我的问题是:为什么片不起作用?我错过了什么?