小白求救~~动态数组,指针,继承,面向对象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个回答

我来回答你的问题 但不一定能解决你的代码问题
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*是完全没问题的,
如楼上说 你用二维指针 确实是有点自己找不痛快,如果 你是新手劝你赶紧换一种方法,这样开始没好处

xingjianfengaa
xingjianfengaa 是的 ,设置参数有的是方法,找一种就是,就不影响你的代码 ,不过指针维数多了 那就复杂了,就算工作时,别人看到也会骂人的,写代码尽量越简单越好,否则出错了 检查越来麻烦
接近 2 年之前 回复
yuAriellexi
yuAriellexi 好的好的,所以new一个对象只可以用默认构造函数,不可以用单参数的那种
接近 2 年之前 回复
xingjianfengaa
xingjianfengaa 额 1 里面我说的是初始化对象,'对象' 并不是指针或new Tiger
接近 2 年之前 回复

话说你为啥用二维指针啊,是有点自己找不痛快,还是老师找你们不痛快,一般写代码也没这么写的。
你说抽象类,抽象类里面,也用不着搞二维指针,当然了,你有你的设计方法,我就不多说了,你把你全部代码贴出来,不然我这边也不好判断。

还楼上呢,都删了,话说最近我是被针对了吗,老删我回答

phenix2009
白色一大坨 代码也不贴全了,就粘贴那么几段,调都没法调,问问题你也得过下脑子
接近 2 年之前 回复
phenix2009
白色一大坨 好心提醒楼主,说做法不对,还不虚心接受让我配合呢,真怪事了,你做的方法有问题,指出来倒是我有错了不成?
接近 2 年之前 回复

1、const只是用来修饰basef在当前函数内无法被修改,与类无关,可以初始化;
2、两个方法,一,再写一个无参构造函数,二,给你的构造函数一个形参默认值 Animal::Animal(const int basef = 0);
3、子类与父类、子类指针与父类指针存在默认的向上转型,二维指针不存在,它是指向指针的指针

Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
立即提问
相关内容推荐