在C 中,如何调用构造函数函数
In C++, how to invoke a constructor function?
这是我的编码:
#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;
}
相关文章:
- 在c++中使用向量时,如何调用构造函数和析构函数
- C++:考虑但不调用构造函数的特殊性
- 对象实例化调用构造函数的次数太多
- 我使用向量来创建类对象列表.初始化向量时如何使用参数调用构造函数?
- C ++:通过大括号调用构造函数?
- 不能调用构造函数
- 赋值 boost::intrusive_ptr 而不调用构造函数?
- 在模板化类的构造函数中调用构造函数
- 如何为 std::vector 分配内存,然后稍后为某些元素调用构造函数?
- 为什么从另一个构造函数内部调用C++构造函数不修改类变量?
- 静态 std::map instatiation 在类的方法中调用构造函数吗?
- 有没有一种简单的方法可以在对象向量上调用构造函数?
- 我不明白在这个例子中什么时候调用构造函数
- 调用c++构造函数的不同方法
- 调用构造函数与将内联常量定义为默认参数
- 如何通过 Rust FFI 调用C++构造函数?
- "new"运算符是否总是调用构造函数?
- 无法调用构造函数
- 使用 "()" 调用构造函数不同于"{}"
- 确定是调用构造函数还是强制转换运算符的因素