编写一个 C++程序,在其中创建一个含有 5 个元素的 Student 类的对象数组,并 给对象数组成员赋值,然后输出对象数组。输出对象数组时分别使用点(.)运算符和箭 头(->)运算符。
时间: 2024-05-11 12:17:04 浏览: 43
好的,以下是代码实现:
```c
#include <stdio.h>
struct Student {
char name[20];
int age;
};
int main() {
struct Student students[5] = {
{"Tom", 18},
{"Jerry", 19},
{"Alice", 20},
{"Bob", 21},
{"Peter", 22}
};
int i;
for (i = 0; i < 5; i++) {
printf("Student %d: %s, %d\n", i + 1, students[i].name, students[i].age);
}
printf("\n");
struct Student *p;
for (p = students; p < students + 5; p++) {
printf("Student %d: %s, %d\n", p - students + 1, p->name, p->age);
}
return 0;
}
```
在这个程序中,我们定义了一个 `Student` 结构体,包含了学生的姓名和年龄。然后我们创建了一个含有 5 个元素的 `Student` 类的对象数组,并给数组成员赋值。接着我们使用两种方式输出对象数组,一种是使用点运算符,另一种是使用箭头运算符。最后返回 0 表示程序正常结束。
相关问题
编写一个 C++程序,在其中创建一个含有 5 个元素的 Student 类的对象数组,并 给对象数组成员赋值,然后输出对象数组。输出对象数组时分别使用点( .)运算符和箭 头(->)运算符
以下是一个示例程序,其中创建了一个名为Student的结构体,并且创建了一个包含5个元素的对象数组,分别使用点运算符和箭头运算符来访问对象成员并输出。
```c
#include <stdio.h>
struct Student {
char name[20];
int age;
float score;
};
int main() {
struct Student students[5] = {
{"Tom", 18, 85.5},
{"Jack", 20, 76.3},
{"Lily", 19, 92.0},
{"Lucy", 19, 88.5},
{"Bob", 21, 69.8}
};
printf("使用点运算符访问对象成员:\n");
for (int i = 0; i < 5; i++) {
printf("姓名:%s,年龄:%d,成绩:%.1f\n", students[i].name, students[i].age, students[i].score);
}
printf("\n使用箭头运算符访问对象成员:\n");
for (int i = 0; i < 5; i++) {
struct Student* p = &students[i];
printf("姓名:%s,年龄:%d,成绩:%.1f\n", p->name, p->age, p->score);
}
return 0;
}
```
输出结果如下:
```
使用点运算符访问对象成员:
姓名:Tom,年龄:18,成绩:85.5
姓名:Jack,年龄:20,成绩:76.3
姓名:Lily,年龄:19,成绩:92.0
姓名:Lucy,年龄:19,成绩:88.5
姓名:Bob,年龄:21,成绩:69.8
使用箭头运算符访问对象成员:
姓名:Tom,年龄:18,成绩:85.5
姓名:Jack,年龄:20,成绩:76.3
姓名:Lily,年龄:19,成绩:92.0
姓名:Lucy,年龄:19,成绩:88.5
姓名:Bob,年龄:21,成绩:69.8
```
编程题(文件操作)。定义一个学生类Student。成员有:(1)私有数据成员:ID(学号,int类型),Name(姓名,string类型)。(2)公有成员函数:GetID(),GetName()分别用于获取学生的上述信息;重载输出流运算符<<,使它能输出学生类对象的所有信息。 再编写一个主程序,主程序中定义一个对象数组,并为该对象数组赋值3个学生对象,这三个学生对象的数据可以自定。使用该输出流把这三个同学的基本信息输出到文件“sinfo1.txt”中。最后再从该文件中读取数据,把这3个学生对象信息按照学
号从小到大的顺序输出到屏幕上。
下面是代码实现:
```c++
#include <iostream>
#include <fstream>
#include <string>
#include <algorithm>
using namespace std;
class Student {
private:
int ID;
string Name;
public:
Student(int id, string name): ID(id), Name(name) {}
int GetID() const {
return ID;
}
string GetName() const {
return Name;
}
friend ostream& operator<<(ostream& os, const Student& s) {
os << "ID: " << s.ID << ", Name: " << s.Name;
return os;
}
};
bool compare(const Student& s1, const Student& s2) {
return s1.GetID() < s2.GetID();
}
int main() {
Student students[] = {
Student(1001, "Tom"),
Student(1003, "Jerry"),
Student(1002, "Bob")
};
ofstream outfile("sinfo1.txt");
for (auto& s : students) {
outfile << s << endl;
}
outfile.close();
ifstream infile("sinfo1.txt");
string line;
Student sorted_students[3];
int i = 0;
while (getline(infile, line)) {
int id_pos = line.find("ID: ") + 4;
int name_pos = line.find(", Name: ");
int id = stoi(line.substr(id_pos, name_pos - id_pos));
string name = line.substr(name_pos + 9);
sorted_students[i++] = Student(id, name);
}
infile.close();
sort(sorted_students, sorted_students + 3, compare);
for (auto& s : sorted_students) {
cout << s << endl;
}
return 0;
}
```
程序中首先定义了一个`Student`类,其中包含一个私有的`ID`和`Name`成员变量,以及公有的`GetID()`和`GetName()`成员方法,以及一个重载输出流运算符`<<`,用于输出学生对象的信息。
然后在主程序中定义了一个学生对象数组,并通过构造函数为每个学生对象赋值。接着将这三个学生对象的信息输出到文件`sinfo1.txt`中。最后从文件中读取数据,将学生对象按照学号从小到大排序,然后输出到屏幕上。在排序时,使用了一个辅助函数`compare`,用于比较两个学生对象的学号大小。
阅读全文