const-初学C++,改进上述程序

问题描述

初学C++,改进上述程序

#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;

}


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

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

解决方案

第3 行include哪个头文件?
还有:麻烦写上注释和增加缩进,不然没什么人会看的……
建议使用链表而不是数组,那样删除和添加就轻松很多
建议数组的话clear()就来个for循环就可以将学生清零,链表就删除节点
而深拷贝指的是拷贝类里面的指针时
你这哪来的两个main函数?菜鸟搞不懂飘过。
其实我也是新手,请多指教

解决方案二:

不要直接使用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指针,把新的指针赋给类,记得要释放内存空间

解决方案三:

你这能运行吗?有的地方尽量加注释

解决方案四:

你这能运行吗?有的地方尽量加注释

时间: 2025-01-02 17:49:36

const-初学C++,改进上述程序的相关文章

c++-初学C++ 一个小程序 求大神帮忙看下

问题描述 初学C++ 一个小程序 求大神帮忙看下 //分秒显示函数 #include using namespace std; //全局引用std命名空间 void showTime(int ,int); int main() { int hours =0 , mins = 0;//定义且初始化分 和秒 cout << "Input the hour "; cin >> hours; cout << "Input the mins &quo

改进ASP程序中的字符串处理性能

程序|性能|字符串 简介 编写 ASP 页面时,开发人员实际上是创建一个格式化的文本流,通过 ASP 提供的 Response 对象写入 Web 客户端.创建此文本流的方法有多种,而您选择的方法将对 Web 应用程序的性能和可缩放性产生很大影响.很多次,在我帮助客户优化其 Web 应用程序的性能时,发现其中一个比较有效的方法是更改 HTML 流的创建方式.本文将介绍几种常用技术,并测试它们对一个简单的 ASP 页面的性能所产生的影响. ASP 设计 许多 ASP 开发人员都遵循良好的软件工程原则

c++中#define 与const用法有什么区别? 如下的程序错在了什么地方?

问题描述 c++中#define 与const用法有什么区别? 如下的程序错在了什么地方? #include using namespace std; #define pi 3.1415; const float PI=3.14; int main() { system("color 4A"); float s1,s2,r; cin>>r; s1=PI*r*r; s2=pi*r*r; cout<<"s1="<<s1<<

蜘蛛/爬虫程序的多线程控制(C#语言)

程序|多线程|控制 在<爬虫/蜘蛛程序的制作(C#语言)>一文中,已经介绍了爬虫程序实现的基本方法,可以说,已经实现了爬虫的功能.只是它存在一个效率问题,下载速度可能很慢.这是两方面的原因造成的: 1.       分析和下载不能同步进行.在<爬虫/蜘蛛程序的制作(C#语言)>中已经介绍了爬虫程序的两个步骤:分析和下载.在单线程的程序中,两者是无法同时进行的.也就是说,分析时会造成网络空闲,分析的时间越长,下载的效率越低.反之也是一样,下载时无法同时进行分析,只有停下下载后才能进行

用C#实现蜘蛛/爬虫程序的多线程控制

在<爬虫/蜘蛛程序的制作(C#语言)>一文中,已经介绍了爬虫程序实现的基本方法,可以说,已经实现了爬虫的功能.只是它存在一个效率问题,下载速度可能很慢.这是两方面的原因造成的: 1.分析和下载不能同步进行.在<爬虫/蜘蛛程序的制作(C#语言)>中已经介绍了爬虫程序的两个步骤:分析和下载.在单线程的程序中,两者是无法同时进行的.也就是说,分析时会造成网络空闲,分析的时间越长,下载的效率越低.反之也是一样,下载时无法同时进行分析,只有停下下载后才能进行下一步的分析.问题浮出水面,我想大

解析php中static,const与define的使用区别_php技巧

define部分:宏不仅可以用来代替常数值,还可以用来代替表达式,甚至是代码段.(宏的功能很强大,但也容易出错,所以其利弊大小颇有争议.)宏的语法为:#define 宏名称 宏值作为一种建议和一种广大程序员共同的习惯,宏名称经常使用全部大写的字母.利用宏的优点:1)让代码更简洁明了当然,这有赖于你为宏取一个适当的名字.一般来说,宏的名字更要注重有明确直观的意义,有时宁可让它长点.2)方便代码维护对宏的处理,在编译过程中称为"预处理".也就是说在正式编译前,编译器必须先将代码出现的宏,用

Windows socket之最简单的socket程序

原文:Windows socket之最简单的socket程序 最简单的服务器的socket程序流程如下(面向连接的TCP连接 ): 1. WSAStartup(); 初始化网络库的使用. 2. socket(); 获得一个socket. 3. bind(); 把获得的socket绑定到一个ip 和端口.既然作为服务器, ip通常为本地IP127.0.0.1. 4. listen(); 监听已经绑定了指定端口的socket. 5. accept(); 接受一个来自客户端的连接. accept()返

Mac 应用程序开发的绝佳起点

  你是否想要开发 Mac 应用程序却又不知道从哪里入手?本路线图提供了 Mac 应用程序开发的绝佳起点,即使你已经是一个 iOS 开发专家,本路线图对你依然适用.Apple让开发应用程序和提交应用程序到 Mac App Store 变得简单.遵循本路线图以了解如何取得开发工具,理解主要概念及最佳实践,并学会查找更多信息.   继续遵循此路线图,你将使用到 Xcode(Apple 提供的集成开发工具)来开发 Mac 应用程序.你将了解 Objective-C(驱动所有Mac应用程序和框架的程序设

J2EE程序的Backbase Ajax前端(组图)

ajax|j2ee|程序 动态HTML技术已经出现了多年.最近,Google的最新Web应用程序GMail.Google Suggests和Google Maps,在前端页面中重新引入了基于标准的DHTML开发模型. Google证明了,DHTML开发模型能够让开发人员创建具有可视化吸引力和高度交互式的Rich Internet Application(丰富网络应用程序,RIA). Adaptive Path公司的Jesse James Garrett为这个基于标准的RIA开发模型创造了术语Aj