当前位置:  开发笔记 > 编程语言 > 正文

从孩子那里得到变数

如何解决《从孩子那里得到变数》经验,为你挑选了1个好方法。

我有一个水果类和一个从水果中继承的苹果.让我们说我有各种各样的水果.我可以说苹果,香蕉和其他水果.
问题:当我尝试从该数组的元素(水果的子)获取值时,它将无法编译.

class Fruit{
public: 
    Fruit();
}

class Apple : public Fruit{
public: 
    Apple();
    int count; //number of apples in the store
}

int main(){
    Fruit market[3];
    market[0] = Apple();

    int apples = market[0].count;
}

我知道这是因为程序不知道它正在看苹果; 但如果我当然知道它是一个苹果(例如通过检查),我如何访问Apple.count?



1> John Zwinck..:

你不能这样做.数组是一串线性字符,它将一个对象存储在下一个对象旁边.因此,它们都必须具有相同的尺寸.由于Apple不适合Fruit所占用的空间,因此您无法将Apple存储在适用于Fruit的阵列插槽中.

你可以做的是存储一个指针数组.这是保持多态类型的常用解决方案:

std::array market;
market[0] = new Apple();
// ...
delete market[0];

由于指针通常在一个程序中具有单个大小,因此通过指针存储不同类型是明智的.您也可以使用C++"智能指针",如下所示:

std::array, 3> market;
market[0].reset(new Apple());
// ...
// delete is called automatically

现在,如果您需要访问,count您有两个选择.如果您确定market[0]Apple,那么您可以使用:

static_cast(market[0]).count

如果您不确定,可以查看:

if (Apple* apple = dynamic_cast(&market[0])) {
    // use apple->count
} else {
    // it's not an Apple
}

推荐阅读
手机用户2502852037
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有