思路:
1.用一个类记录成员信息
2.对操作符<<以非成员函数的形式重载,但是为了能访问类的私有成员,将其声明为友元函数,这里的重载实现了更方便的格式化输出
3.不能声明一个类型为people类的数组,因为这里定义了构造函数,就不会调用默认构造函数,而没有参数不能构造一个类,我们知道定义一个数组,在没有赋初值时,其中是杂乱的变量,对普通类型不会,对类来说这样的不确定性会报错
#include<iostream>
#include<iomanip>
#include<string>
#include<vector>
using namespace std;
class people {
private:
int number;
string name;
int age;
public:
people(int n, string name, int a);
friend ostream& operator<<(ostream& out, const people& c);
};
people::people(int n, string name, int a) {
this->number = n;
this->name = name;
this->age = a;
}
ostream& operator<<(ostream& out, const people& c) {
out << setw(8) << c.number << setw(8) << c.name << setw(8) << c.age << endl;
return out;
}
int main() {
vector<people>a;
int n;
cin >> n;
cout << "请分别输入" << n << "个人员的编号,姓名,年龄:" << endl;
for (int i = 0; i < n; i++) {
int number, age;
string name;
cin >> number >> name >> age;
a.push_back(people(number, name, age));
}
cout << "--------------------------" << endl;
cout << setw(8) << "number" << setw(8) << "name" << setw(8) << "age" << endl;
cout << "--------------------------" << endl;
for (int i = 0; i < n; i++) {
cout << a[i];
}
cout << "--------------------------" << endl;
return 0;
}
// 运行
3
请分别输入3个人员的编号,姓名,年龄:
1 zhang 18
2 yi 19
3 xing 20
--------------------------
number name age
--------------------------
1 zhang 18
2 yi 19
3 xing 20
--------------------------