首页 新闻 赞助 找找看

求大神帮忙改进程序,我是c++菜鸟

0
悬赏园豆:180 [已解决问题] 解决于 2015-06-19 17:18
#ifndef COURSE_H
#define COURSE_H
#include 
using namespace std;
class Course
{
public:
Course(const string& courseName, int capacity);
~Course();
string getCourseName() const;
void addStudent(const string& name);
void dropStudent(const string& name);
string* getStudents() const;
int getNumberOfStudents() const;
private:
string courseName; 
string* students;
int numberOfStudents; 
int capacity;
};
#endif

int main()
{
Course course1("Data Structures", 10);
Course course2("Database Systems", 15);
course1.addStudent("Peter Jones");
course1.addStudent("Brian Smith");
course1.addStudent("Anne Kennedy");
course2.addStudent("Peter Jones");
course2.addStudent("Steve Smith");
cout << "Number of students in course1: "
    << course1.getNumberOfStudents() << endl;
string* students = course1.getStudents();
for (int i = 0; i < course1.getNumberOfStudents(); i++)
    cout << students[i] << ", ";

cout << endl;

cout << "Number of students in course2: "
    << course2.getNumberOfStudents() << endl;
students = course2.getStudents();
for (int i = 0; i < course2.getNumberOfStudents(); i++)
    cout << students[i] << ", ";

cout << endl;

return 0;
}

#include 
#include "Course.h"
using namespace std;
int main()
{
Course course1("C++", 10);
Course course2(course1);
course1.addStudent("Peter Pan");
course2.addStudent("Lisa Ma");

cout << "students in course1: " <<
    course1.getStudents()[0] << endl;
cout << "students in course2: " <<
    course2.getStudents()[0] << endl;

return 0;
}

ps: 

添加学生时,若数组容量不够,则创建一个更大的数组,并将内容拷贝到新的数组;
实现dropStudents函数;
添加一个新的函数clear(),删除该课程的所有学生;
在该类中实现自定义的析构函数和拷贝构造函数,达到深拷贝的目的;

编写测试程序,测试实现的类。

c++
顾家的主页 顾家 | 初学一级 | 园豆:40
提问于:2015-06-19 16:39
< >
分享
最佳答案
0

给你点粗略的建议把。

不要直接使用using namespace std,使用using std::cout ,using std::cin ;using std:: ...代替,这样可以避免编译之后链入过多不必要的东西。

clear函数 的话,就直接numberOfStudents设置为0就可以了,这样下次添加的时候就会覆盖之前的内容,并且读取students内容的时候,也不会有问题,因为循环是用numberOfStudents来标识结束的位置的。

析构函数就直接 if(students) delete[]students;就可以了、

拷贝构造函数的话,添加一个Course(Course& copyCourse)最好还要重载=操作符,深复制的话,就直接开一个新的内存单元给对象,然后该怎么拷贝就怎么拷贝

至于那个添加学生不够的时候就扩大容量的话,就直接添加之前检查 numberOfStudents; capacity;如果确实不够的话,就以16为增量,生产新的空间,之后复制,再添加新的内容,之后要记得删除旧的students指针,把新的指针赋给类,记得要释放内存空间.

收获园豆:180
请叫我头头哥 | 大侠五级 |园豆:9382 | 2015-06-19 17:07

 多谢大神

顾家 | 园豆:40 (初学一级) | 2015-06-19 17:18
其他回答(1)
0

这哪儿叫“改进”,知道“改进”是啥意思不?你这明显是赤裸裸的求代码。

Launcher | 园豆:45045 (高人七级) | 2015-06-19 16:52

 大神, 给点思路也行阿

支持(0) 反对(0) 顾家 | 园豆:40 (初学一级) | 2015-06-19 16:55

@顾家: 我推荐你看下 CAtlArray 的源码。

支持(0) 反对(0) Launcher | 园豆:45045 (高人七级) | 2015-06-19 16:58
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册