构造函数<初学者>

时间:2018-09-10 10:10:10

标签: c++

我是C ++的新手,在研究构造函数时,我正在尝试代码段。

#include <iostream>
using namespace std;

class CCircle
{
    double dRadius;
public:
    CCircle(double in_Radius) : dRadius(in_Radius) {}

    double area()
    {
        return (3.14*dRadius*dRadius);
    }
};


class CCylinder
{
    CCircle CircleObject;
    double dheight;

public:
    CCylinder(double in_dheight) : dheight(in_dheight) {}

    double volume()
    {
        return (CircleObject.area()*dheight);
    }
};

int main()
{
    CCircle CircleObject (0.5);
    CCylinder CylinderObject (5.2);
    cout<<"Area is " << CircleObject.area() <<endl;
    cout<<"Volume is " << CylinderObject.volume() <<endl;
}

我在此代码中犯了任何错误吗?如果是,您能告诉我错误吗?我无法找出问题所在

2 个答案:

答案 0 :(得分:1)

您正在询问是否存在任何问题,而您的程序甚至无法编译。您应该收到此错误:

main.cpp: In constructor ‘CCylinder::CCylinder(double)’:
main.cpp:29:52: error: no matching function for call to 
    ‘CCircle::CCircle()’
   CCylinder(double in_dheight) : dheight(in_dheight) {}

其中提到Circle类没有默认构造函数。这意味着您应该将参数传递给构造函数(in_Radius)。

或者,当然,您可以只为circle提供默认的构造函数,甚至为已经存在的circle构造函数的参数提供默认值。

答案 1 :(得分:0)

您的代码无法正常工作,因为该错误明确表明未定义默认构造函数error: no matching function for call to ‘CCircle::CCircle()’

尝试一下

class CCircle
{
    double dRadius;
    public:
        CCircle() {}
        CCircle(double in_Radius) : dRadius(in_Radius) {}

        double area()
        {
            return (3.14*dRadius*dRadius);
        }
};


class CCylinder
    {
        CCircle CircleObject;
        double dheight;

        public:
        CCylinder() {}
        CCylinder(double in_dheight) : dheight(in_dheight) {}

        double volume()
        {
            return (CircleObject.area()*dheight);
        }
};