动态添加学生成员,重载运算符的练习。
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;
}
在此基础上增加了动态添加学生类成员变量:
#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;
}
相关文章推荐
- Ubuntu14.04+Caffe+CPU,挖挖坑坑
- 抽象方法与接口
- 相邻整数
- 结对编程之队友篇
- 开发中js常用的格式化方法
- C#使用MySQLConnectorNet和MySQLDriverCS操作MySQL的方法
- python 分页
- OpenJudge 1806:词典find()与end()
- 利用Sharepoint 创建轻量型应用之基本功能配置!
- IOCCC 1987 最佳单行代码解读
- 蓝桥杯-基础练习-十六进制转十进制
- 如何将ArrayList转换成整型数组
- Codeforces Round #305 (Div. 2) A
- postMan 使用
- Python之路【第十八篇】Django小项目webQQ实现
- 04.——水仙花数,字母大小写转换算法
- hbase与zookeeper版本对应关系
- hdu 4274 Spy's Work
- 父、子进程同步的5个例程的两种实现方式
- 细节要多注意