您的位置:首页 > 其它

动态添加学生成员,重载运算符的练习。

2016-04-09 10:56 344 查看
源代码引至贺利坚老师的 学生可以相加吗?

在此基础上增加了动态添加学生类成员变量:

#include <iostream>
#include <string>

using namespace std;
class Student;
class Class //班级类
{
int number;
Student *students;
friend class Student;
public:
Class();
Class(const Class &c);
~Class();
void display();
//新增部分,可以动态添加学生类成员数据。
Class & operator=(const Class &);
Class & operator++();
Class & operator+(const Student &);
//////////////////////////////////////
};

class Student //学僧类
{
private:
int num;
string name;
char sex;
int age;
friend class Class;
public:
Student() {}
Student(int n, string nam, char s, int a);
Class operator+(Student &s1);
};

Class::Class() :number(0), students(NULL) {}
Class::Class(const Class &c)
{
number = c.number;
students = new Student[number];
int i;
for (i = 0; i<number; i++)
students[i] = c.students[i];
}
Class::~Class()
{
delete[] students;
}
void Class::display()
{
int i;
for (i = 0; i<number; i++)
{
cout << i << ": " << students[i].num << ", " << students[i].name;
cout << ", " << students[i].sex << ", " << students[i].age << endl;
}
}

////////////////////////////////// 增加部分////////////////////////////////////////
Class & Class::operator=(const Class & c)
{
number = c.number;
for (size_t i = 0; i < c.number; ++i)
students[i] = c.students[i];
return *this;
}

Class & Class::operator++()
{
Class temp = *this;
delete[] students;
students = new Student[temp.number + 1];
*this = temp;
++number;
return *this;
}

Class & Class::operator+(const Student & s)
{
++*this;
students[number - 1] = s;
return *this;
}
///////////////////////////////////////////////////////////////////////////////////

Student::Student(int n, string nam, char s, int a) :num(n), name(nam), sex(s), age(a) {}

Class Student::operator+(Student &s1)
{
Class c;
c.number = 2;
c.students = new Student[c.number];
c.students[0] = *this;
c.students[1] = s1;
return c;
}

int main()
{
Student s1(1, "Zhang", 'f', 20), s2(2, "Li", 'm', 18);
Class c = s1 + s2 + s1 + s2;
c.display();
system("pause");
return 0;
}

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: