【问题标题】:C++ default Constructor not being called [duplicate]未调用C ++默认构造函数[重复]
【发布时间】:2013-11-06 02:17:49
【问题描述】:

我对 c++ 很陌生,所以如果我忽略了一些简单的事情,请原谅我。我有一个类 Circle:

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

在我的 main 中,我尝试使用 each 构造函数创建两个圆,但是使用 Circle() 创建的 Circle 永远不会被创建。我不能为我的生活弄清楚为什么?没有错误消息或任何东西。

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

【问题讨论】:

    标签: c++ class constructor


    【解决方案1】:
     Circle c2();
    

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

    Circle c2;
    

    【讨论】:

    • 效果很好,谢谢。如果不是凌晨 3 点,我可能最终会注意到这一点。我想现在是时候放弃了。
    • 或者更好的是:Circle c2{} 是值初始化,Circle c2; 是默认初始化。
    • 哦,顺便说一句,这不是令人烦恼的解析。这只是 vexing 解析。 Type1 a(Type2());令人烦恼的解析。
    • @Nawaz,能否详细说明 Circle c2{ } 的区别;和圈c2; ?这会帮助其他人。
    • @ChanKim:在此站点上搜索 value-initializationdefault-initialization
    【解决方案2】:

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

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

    你需要

    Circle c2;
    

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

    【讨论】:

      猜你喜欢
      • 2015-10-09
      • 1970-01-01
      • 2016-03-25
      • 2014-07-05
      • 2012-10-17
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多