yuAriellexi 2018-10-17 23:11 采纳率: 100%
浏览 505
已采纳

小白求救~~动态数组,指针,继承,面向对象c++

Tiger是Animal的子类
TigerArr是一个指针指向一组指向Tiger的指针

    Animal **AnimalArr;
    Tiger **TigerArr;
    void f(Animal **arr, int num);//函数原型
    void f(Animal **arr, int num)
{
    for (int i = 0; i < num; i++)
    {
        arr[i] = new Animal*(50);//错误一
//cannot initialize a new value of type 'Animal *' with an rvalue of type 'int'
    }
}
call f:
f(TigerArr, tigernum);
错误二:
 cannot initialize a parameter of type 'Animal **' with an lvalue of type 'Tiger **'

Animal 构造函数

 Animal::Animal(const int basef)
    : BaseFoodCost(10)
{
    A = 1;
    C = 0;
    N = 0;
    P = 0;
}

 Tiger::Tiger(const int basef) : Animal(50)
{
    A = 1;
    C = 10000;
    N = 1;
    P = 2000; 
}

几个问题:
1. const变量basef在animal类和Tiger类里面有不同的数值,这样初始化可以么?
2. 不知道如何初始化错误一,arr[i]是指向Animal的一个指针,但是Animal的构造函数必须有一个数值Animal(int),所以该怎么写?
3. TigerArr = new Tiger*[10];

Tiger是Animal的子类,在传递函数的时候,为什么会有错误二

展开全部

  • 写回答

4条回答 默认 最新

  • xingjianfengaa 2018-10-18 00:35
    关注

    我来回答你的问题 但不一定能解决你的代码问题
    1.Tiger(50)这来初始化一个对象是没有问题的
    2.你用的是双重指针正常情况下应该是 arr[i]=new ** ,但这时你的问题来了,new 的默认是 new XX(n) 这可以看出来 你要new必有要有默认构造函数,
    就是不带参数的构造函数,带参数的构造函数只能用别的方法 在默认构造里设置一个值或者在类里加个set函数来设置你的const也可以,那样new 之后 直接 调用set(const int n)
    3.TigerArr = new Tiger(10); 这里是指创建一个长度为10的tiger数组,用的是默认构造函数,也就是不带参数的构造函数
    tiger是Animal的子类 用 tiger*来代替Animal*是完全没问题的,
    如楼上说 你用二维指针 确实是有点自己找不痛快,如果 你是新手劝你赶紧换一种方法,这样开始没好处

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(3条)
编辑
预览

报告相同问题?

悬赏问题

  • ¥15 PADS Logic 原理图
  • ¥15 PADS Logic 图标
  • ¥15 电脑和power bi环境都是英文如何将日期层次结构转换成英文
  • ¥20 气象站点数据求取中~
  • ¥15 如何获取APP内弹出的网址链接
  • ¥15 wifi 图标不见了 不知道怎么办 上不了网 变成小地球了
手机看
程序员都在用的中文IT技术交流社区

程序员都在用的中文IT技术交流社区

专业的中文 IT 技术社区,与千万技术人共成长

专业的中文 IT 技术社区,与千万技术人共成长

关注【CSDN】视频号,行业资讯、技术分享精彩不断,直播好礼送不停!

关注【CSDN】视频号,行业资讯、技术分享精彩不断,直播好礼送不停!

客服 返回
顶部