为什么我的对象似乎被创建了两次?

时间:2017-03-19 10:15:07

标签: c++ class constructor destructor

所以我今天正在学习一些课程,我对如何显示功能感到困惑

dateType::dateType()
{
    cout<<"Object Created\n";
}

void dateType::setDate()
{
    cout<<"Enter Month: ";
    cin>>month;
    cout<<endl;
    cout<<"Enter Date: ";
    cin>>day;
    cout<<endl;
    cout<<"Enter Year: ";
    cin>>year;
    cout<<endl;
}

.....
//other function declaration to access the private 
.....

void dateType:: printdate()
{
    cout<<"Month: "<<month<<endl;
    cout<<"Date: "<<day<<endl;
    cout<<"Year: "<<year<<endl;
    cout<<"Leap Year: \n"<<endl;
}

dateType::~dateType()
{
    cout<<"Object Deleted";
}

int main()
{
    dateType().setDate(); 
    dateType().printdate();

    return 0;
}

现在当我运行程序时它工作正常,但问题是构造函数和析构显示两次。

Photo of the output

Full code

1 个答案:

答案 0 :(得分:2)

这是因为在调用setDate()方法之后会破坏您创建的对象,因为main中没有标识符。你刚刚创建它,称为方法,然后它结束了。 你做了:

dateType().setDate();

所以当你做dateType()时会创建dataType对象。但是在调用setDate()方法之后,它被销毁了,因为你没有把它保存到任何地方。

尝试做:

dateType p;
p.setDate();

这次它不会被摧毁。