我想创建一个学生班级并获取3个输入信息并输出该文件。怎么样?这是我的尝试:
#include <iostream>
using namespace std;
class Student{
private:
char name[50];
char id[50];
int age;
public:
void getdata()
{
//take name as input
//take id as input
//take age as input
}
void showdata()
{
//display stored file
}
}
int main()
{
Student s1;
ofstream s1("student.txt"); //i want to store that 's1' object
//anything else
return 0;
}
答案 0 :(得分:4)
C ++使用流范例来实现标准输入/输出。
流范例意味着如果应用程序想要访问/使用资源(文件,控制台等),则流充当应用程序和资源之间的中介:
ofstream +----+
+-------------------->|File|
| +----+
|
+------+------+
| Application |
+------+------+
|
| +-------+
+-------------------->|Console|
cout +-------+
这意味着您执行的每个写入/读取操作都是流操作。这一点就是流操作基本相同,与您使用的资源类型(以及什么类型的流)无关。
这允许我们实现“通用”(通用含义对任何类型的流/资源都有效)。怎么样? 重载C ++运算符&gt;&gt;和&lt;&lt; 。
对于输入操作(输入意味着从流中接收数据并将其放入我们的变量/对象中),我们需要重载&gt;&gt;运算符如下:
istream& operator>>(istream& is , MyClass& object)
{
is >> object.myClassAtributte; (1)
... //Same for every attribute of your class.
return is;
}
首先,请注意输入流是通过引用传递的。通过引用,因为流是不可复制的(复制流的确切意思是什么?复制你的应用程序和资源之间的链接?这听起来很荒谬),非const因为你要修改流(你要写通过它。)
最后,请注意函数不返回void,返回对传递给函数的同一个流的引用。这允许你编写像cout << "Hello. " << "Im" << " Manu343726" << endl;
对于输出操作(输出意味着将数据发送到流),我们需要重载&lt;&lt;运算符,其实现完全相同:
ostream& operator<<(ostream& os , const MyClass& object)
{
os << object.myClassAtributte; (1)
... //Same for every attribute of your class.
return os;
}
请注意,在这种情况下,您的对象是传递给const的,因为我们不会修改它(我们只会读取它的属性)。
(1)最好实现此功能,使其成为您班级的朋友,以允许我们访问私人/受保护的成员。
答案 1 :(得分:0)
您需要重载<<
和>>
ostream
和istream
运算符
std::ostream& operator<< (std::ostream& stream, const Student& student)
std::istream& operator<< (std::istream& stream, Student& student)
让他们成为朋友并实施