为了账号安全,请及时绑定邮箱和手机立即绑定

如何设置成 2 呢(就是原来参数里面的数值),难道这个参数是不能连带的吗?

如何设置成 2 呢(就是原来参数里面的数值),难道这个参数是不能连带的吗?

江户川乱折腾 2022-07-25 18:14:42
class CShape{public:CShape(int pre_location) { location=pre_location; }~CShape() {}virtual void display() =0;char randomchar();protected:int location;};class CTriangle: virtual public CShape{public:CTriangle(int pre_height, int pre_location): CShape(pre_location) { height=pre_height; }~CTriangle() {}virtual void display();protected:int height;};class CReserveTriangle: public CTriangle{public:CReserveTriangle(int pre_height, int pre_location): CTriangle(pre_height, pre_location) {}~CReserveTriangle() {}virtual void display();protected:int height;};错误shape.h(28) : error C2512: 'CShape::CShape' : no appropriate default constructor availablequeue.cppwhy?如果在 CShape 的构造函数里面加上 pre_location=0 默认参数就没有错误了,但是我不需要默认参数。如果加上 CShape(){} 的话,或者设置 pre_location=0 默认参数的话,在程序执行过程中,新建一个 CReserveTriangle 类的对象,如ptr = new CReserveTriangle(1,2)执行过程中, CReserveTriangle 里面的 location 就会变成 0。如何设置成 2 呢(就是原来参数里面的数值),难道这个参数是不能连带的吗
查看完整描述

3 回答

?
慕莱坞森

TA贡献1810条经验 获得超4个赞

之所以要提供没有参数的构造函数或给参数赋予初始值,是因为定义或动态分配对象数组时需要调用一个没有参数的构造函数,由于CShape类内部给出了一个带参数的构造函数,因而编译器不会自动给类生成一个默认构造函数,所以创建对象数组时会出错。给参数赋予初值的意思是,如果某个参数没有提供值将会使用默认值,否则使用实参传递过来的值。

查看完整回答
反对 回复 2022-08-01
?
有只小跳蛙

TA贡献1824条经验 获得超8个赞

no appropriate default constructor available
是没有默认的构造函数,不是构造参数

CShape(){}

可以连带,继承的属性不能设置成保护
public:
int location;

#include <stdio.h>
#include <iostream>

using namespace std;

class CShape
{
public:
CShape() {}
CShape(int pre_location) { location=pre_location; }
~CShape() {}
virtual void display() =0;
char randomchar();
public:
int location;
};

class CTriangle: public CShape
{
public:
CTriangle(int pre_height, int pre_location): CShape(pre_location) { height=pre_height; }
~CTriangle() {}
virtual void display()=0;
private:
int height;
};

class CReserveTriangle: public CTriangle
{
public:
CReserveTriangle(int pre_height, int pre_location): CTriangle(pre_height, pre_location) {}
~CReserveTriangle() {}
virtual void display();
protected:
int height;
};
void CReserveTriangle::display()
{

}

void main( )
{
CReserveTriangle crt(1,2);
cout<< crt.location<<endl;
}


查看完整回答
反对 回复 2022-08-01
?
长风秋雁

TA贡献1757条经验 获得超7个赞

class CShape
{
public:
CShape(int pre_location) { location=pre_location; }
CShape(){}/////////////////////////////add this line
~CShape() {}
virtual void display() =0;
char randomchar();
protected:
int location;
};


查看完整回答
反对 回复 2022-08-01
  • 3 回答
  • 0 关注
  • 171 浏览

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号