在C ++中,如何调用构造函数?

时间:2017-06-02 17:04:58

标签: c++

这是我的编码:

#include<iostream>
#include<string>
using std::endl;
using std::cin;
using std::cout;
using std::string;
using std::istream;
struct worker
{
   worker()=default;
   worker(istream &f);
   int data;
};
int main()
{
    worker a;
    cout<<a.data<<endl;
    system("Pause");
    return 0;
}
worker::worker(istream&f)
{
   read(f,*this);
}
istream&read(istream &f,worker&student)
{
   f>>student.data
   return f;
}

但是当我调试时,它警告我,我还没有初始化a的元素。我知道我需要通过worker(istream &f)输入数据,但我不知道如何调用构造函数来初始化a.data

1 个答案:

答案 0 :(得分:3)

  

但是当我调试时,它警告我我没有初始化a的元素。我知道我需要通过worker(istream &f)

输入数据

你意识到警告确实是一个问题,这很好。从语法的角度来看,这是一个警告,但从语义的角度来看,这是一个错误。

我知道部分没有根据。您意识到需要初始化a.data,但您的做法存在缺陷。

  

但我不知道如何调用构造函数来引入a.data

首先,你不能在已经构造的对象上调用构造函数。构造函数仅用于构造对象,而不是在已构造的对象上再次调用。

其次,使用不同的策略初始化对象。完全删除构造函数worker(istream&)。在已构造的对象上使用read,例如:

int main()
{
    worker a;
    read(std::cin, a);
    std::cout << a.data << std::endl;
    return 0;
}

进一步完善。

而不是read,请使用operator>>

std::istream& operator>>(std::istream& f, worker& w)
{
   f >> w.data;
   return f;
}

然后,您可以使用:

int main()
{
    worker a;
    std::cin >> a;
    std::cout << a.data << std::endl;
    return 0;
}