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

Mic*_*eJS 8 c++ constructor class

我是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);
Run Code Online (Sandbox Code Playgroud)

};

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

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();
}
Run Code Online (Sandbox Code Playgroud)

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

int main{
    Circle circle(a, 3.3);
    Circle c2();
}
Run Code Online (Sandbox Code Playgroud)

Alo*_*ave 25

 Circle c2();
Run Code Online (Sandbox Code Playgroud)

不创建对象,它按名称声明一个函数,c2该函数不带参数并返回一个Circle对象.如果要创建对象,只需使用:

Circle c2;
Run Code Online (Sandbox Code Playgroud)

  • 哦BTW,这不是*最令人烦恼的解析.它只是*烦恼*解析.`Type1 a(Type2());`是***vexing parse. (5认同)
  • 或者更好的是:`圈c2 {}`这是值初始化和`圈c2;`是默认初始化. (2认同)

jua*_*nza 6

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

// parameter-less function c2, returns a Circle.
Circle c2();
Run Code Online (Sandbox Code Playgroud)

你需要

Circle c2;
Run Code Online (Sandbox Code Playgroud)

要么

Circle c2{};  // requires c++11
Run Code Online (Sandbox Code Playgroud)