小编And*_*tos的帖子

C ++转换为基类

我有一个基类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吗?

c++ polymorphism casting

5
推荐指数
1
解决办法
9709
查看次数

切片数组的引用

我有以下地图:

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)

我的问题是:为什么片不起作用?我错过了什么?

arrays perl reference slice

0
推荐指数
1
解决办法
54
查看次数

标签 统计

arrays ×1

c++ ×1

casting ×1

perl ×1

polymorphism ×1

reference ×1

slice ×1