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

In C++, how to invoke a constructor function?

本文关键字:调用 构造函数 函数 何调用      更新时间:2023-10-16

这是我的编码:

#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

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

输入数据

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

我知道部分是不基调的。您意识到需要初始化a.data,但是您的方法是有缺陷的。

,但我不知道如何调用构造函数函数以intiallize 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;
}