加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

c – 指向基类数组的指针,填充派生类

发布时间:2020-12-16 06:03:15 所属栏目:百科 来源:网络整理
导读:如果我有一个基类,只有虚拟方法和2个派生类 基类,实现了这些虚拟方法. 我如何: // causes C2259 BaseClass* base = new BaseClass[2]; BaseClass[0] = new FirstDerivedClass; BaseClass[1] = new SecondDerivedClass; 要么: // causes "base is being use
如果我有一个基类,只有虚拟方法和2个派生类
基类,实现了这些虚拟方法.

我如何:

// causes C2259
 BaseClass* base = new BaseClass[2];

 BaseClass[0] = new FirstDerivedClass;
 BaseClass[1] = new SecondDerivedClass;

要么:

// causes "base is being used without being initialized"
BaseClass* base;
// causes CC59 again
BaseClass* base = new BaseClass;

base[0] = FirstDerivedClass();
base[1] = SecondDerivedClass();

(或类似的东西)

…所以我可以通过DerivedClass访问BaseClasss方法,
但是通过指针和指针是DerivedClasss的数组?

解决方法

你的数组是错误的类型:它存储BaseClass对象实例,而不是它们的指针.由于BaseClass似乎是抽象的,编译器抱怨说它不能默认构造实例来填充你的数组.

即使BaseClass不是抽象的,在C中使用数组是big no-no,所以你应该在任何情况下做不同的事情.

通过将代码更改为:

BaseClass** base = new BaseClass*[2];

BaseClass[0] = new FirstDerivedClass;
BaseClass[1] = new SecondDerivedClass;

也就是说,大多数情况下,最好使用std :: vector而不是纯数组和智能指针(如std :: shared_ptr)而不是愚蠢的指针.使用这些工具而不是手动编写代码将以非常小的运行时代价透明地处理大量问题.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读