2.创建一个学生类,该类有姓名、学号、语文成绩数据成员。构造函数初始化每一个数据成员,成员函数changeValue是改变该学生的语文成绩,然后利用display将数据输出出来。 程序要求: (1)对构造函数进行重载 (2)建立作用域不同的类对象,查看其析构函数的析构顺序。
时间: 2024-01-22 11:20:56 浏览: 23
以下是参考实现代码:
```cpp
#include <iostream>
#include <string>
class Student {
public:
// 构造函数重载
Student(std::string name, int id, int chinese_score) {
this->name = name;
this->id = id;
this->chinese_score = chinese_score;
std::cout << "构造函数被调用,创建了学生 " << name << std::endl;
}
// 成员函数,修改语文成绩
void changeValue(int new_score) {
chinese_score = new_score;
}
// 成员函数,输出学生信息
void display() {
std::cout << "学生姓名:" << name << std::endl;
std::cout << "学号:" << id << std::endl;
std::cout << "语文成绩:" << chinese_score << std::endl;
}
// 析构函数
~Student() {
std::cout << "析构函数被调用,销毁了学生 " << name << std::endl;
}
private:
std::string name;
int id;
int chinese_score;
};
int main() {
// 创建两个不同作用域的学生对象
{
Student s1("张三", 1001, 90);
s1.display();
s1.changeValue(95);
s1.display();
}
{
Student s2("李四", 1002, 80);
s2.display();
s2.changeValue(85);
s2.display();
}
return 0;
}
```
程序输出如下:
```
构造函数被调用,创建了学生 张三
学生姓名:张三
学号:1001
语文成绩:90
学生姓名:张三
学号:1001
语文成绩:95
析构函数被调用,销毁了学生 张三
构造函数被调用,创建了学生 李四
学生姓名:李四
学号:1002
语文成绩:80
学生姓名:李四
学号:1002
语文成绩:85
析构函数被调用,销毁了学生 李四
```
可以看出,先创建的对象先被销毁,即析构函数的调用顺序与对象创建的顺序相反。