C ++默认构造函数未被调用

时间:2013-10-27 07:26:43

标签: c++ class constructor

我对c ++很新,所以如果我忽略了一些简单的东西,请原谅我。我有一个班级圈:

class Circle: public Shape{
protected:
     //string name;
     Point focus;
     float radius;
private:

public:
    virtual void calculateArea();
    virtual void calculatePerimeter();
    Circle();
    Circle(Point p, float r);

};

我有两个构造函数,其中一个是我重载的默认值:

Circle::Circle()
{
    Point p(1,1);
    focus = p;
    radius = 10;
    name = "Circle";
    calculatePerimeter();
    calculateArea();
    cout<<"default circle"<<endl;
}
Circle::Circle(Point p, float r)
{
    focus = p;
    radius = r;
    name = "Circle";
    calculatePerimeter();
    calculateArea();
}

在我的主要部分中,我尝试使用每个构造函数创建两个圆圈,但是使用Circle()创建的圆圈永远不会被创建。我不能为我的生活搞清楚为什么?没有错误消息或任何内容。

int main{
    Circle circle(a, 3.3);
    Circle c2();
}

2 个答案:

答案 0 :(得分:25)

 Circle c2();

不创建对象,它按名称c2声明一个函数,该函数不接受任何参数并返回Circle个对象。如果你想创建一个对象,只需使用:

Circle c2;

答案 1 :(得分:6)

这不是实例化,而是函数声明:

// parameter-less function c2, returns a Circle.
Circle c2();

你需要

Circle c2;

Circle c2{};  // requires c++11