在构造函数和析构函数中打印值

时间:2014-08-08 04:16:54

标签: c++ constructor destructor

我被困在以下代码中的构造函数和析构函数,我不理解结果。值的一个应该是7,怎么会有四个数字?帮助赞赏。

  class Package
  {
       private:
       int value;
public:
    Package()
    {
        value=7;
        cout<<value<<endl;
    }
    Package(int v)
    {
        value=v;
        cout<<value<<endl;
    }
    ~Package()
    {
        cout<<value<<endl;
    }
  };
  int main()
  {
     Package obj1(4);
     Package obj2();
     Package obj3(2);
     return 0;
  }

在控制台提示符中显示

4
2
2
4

3 个答案:

答案 0 :(得分:4)

本声明

 Package obj2();

是一个没有参数且返回类型为Package的函数声明。

您可以改为编写

 Package obj2 {};

如果你想要它是一个对象定义。

所以你只定义了两个对象

 Package obj1(4);
 Package obj3(2);

相应地,构造函数打印

4
2 

析构函数以相对于被调用构造函数(LIFO - 最后输入第一个输出)的相反顺序调用并输出

2
4

答案 1 :(得分:2)

Package obj2();

在C ++中展示了所谓的Most Vexing Parse问题。

答案 2 :(得分:2)

Package obj2();

此行被解析为“声明一个名为obj2的函数,它返回一个Package对象,而不是”声明一个名为obj2的类型为Package的变量并构造没有争论。“这称为most vexing parse

修复任何C ++:

Package obj2;

使用C ++ 11语法进行更明确的修复:

Package obj2{};