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

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 available
queue.cpp

why?
如果在 CShape 的构造函数里面加上 pre_location=0 默认参数就没有错误了,但是我不需要默认参数。
如果加上 CShape(){} 的话,或者设置 pre_location=0 默认参数的话,在程序执行过程中,新建一个 CReserveTriangle 类的对象,如
ptr = new CReserveTriangle(1,2)
执行过程中, CReserveTriangle 里面的 location 就会变成 0。如何设置成 2 呢(就是原来参数里面的数值),难道这个参数是不能连带的吗

江户川乱折腾
浏览 172回答 3
3回答

慕莱坞森

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

有只小跳蛙

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;}

长风秋雁

class CShape{public:CShape(int pre_location) { location=pre_location; }CShape(){}/////////////////////////////add this line~CShape() {}virtual void display() =0;char randomchar();protected:int location;};
打开App,查看更多内容
随时随地看视频慕课网APP