重写程序清单11-16中Course类的addStudent函数c++,使得Course.cpp中,如果学生的数量超过了容量,代码抛出runtime_error异常
时间: 2024-03-14 18:43:55 浏览: 27
以下是重写后的addStudent函数代码:
```cpp
void Course::addStudent(const string& name) {
if (numberOfStudents >= capacity) {
throw runtime_error("Exceeding the capacity!");
}
students[numberOfStudents] = name;
++numberOfStudents;
}
```
在该代码中,我们首先检查学生的数量是否超过了容量。如果是,则抛出一个runtime_error异常。否则,将学生添加到students数组中,并将numberOfStudents加1。
相关问题
(使得Course类可复制)重写程序清单10-6中的Course类,增加一个clone 方法,执行students 域上的深度复制。
以下是修改后的Course类,增加了clone方法来实现students域的深拷贝:
```java
public class Course implements Cloneable {
private String courseName;
private ArrayList<String> students = new ArrayList<>();
public Course(String courseName) {
this.courseName = courseName;
}
public void addStudent(String student) {
students.add(student);
}
public String[] getStudents() {
return students.toArray(new String[0]);
}
public int getNumberOfStudents() {
return students.size();
}
public String getCourseName() {
return courseName;
}
@Override
public Object clone() {
try {
Course cloned = (Course) super.clone();
cloned.students = (ArrayList<String>) students.clone();
return cloned;
} catch (CloneNotSupportedException e) {
return null;
}
}
}
```
在clone方法中,首先调用了父类的clone方法,得到一个浅拷贝的Course对象,然后将students域进行深拷贝,最后返回新的Course对象。这样,当我们使用clone方法复制一个Course对象时,得到的新对象将会拥有一个独立的、深拷贝的students列表,与原对象的students列表完全独立。
(使得Course类可复制)重写程序满单10-6(参见教材P319)中的Course类,增加一个clone方法,执行students域上的深度复制。
好的,以下是重写后的Course类:
```java
public class Course implements Cloneable {
private String courseName;
private ArrayList<String> students = new ArrayList<>();
public Course(String courseName) {
this.courseName = courseName;
}
public void addStudent(String student) {
students.add(student);
}
public String[] getStudents() {
return students.toArray(new String[0]);
}
public String getCourseName() {
return courseName;
}
public int getNumberOfStudents() {
return students.size();
}
public void dropStudent(String student) {
students.remove(student);
}
@Override
public Course clone() {
try {
Course cloned = (Course) super.clone();
cloned.students = (ArrayList<String>) students.clone();
return cloned;
} catch (CloneNotSupportedException ex) {
return null;
}
}
}
```
在上述代码中,我们实现了`Cloneable`接口,并重写了`clone()`方法,使用`super.clone()`获取对象的浅拷贝,再对`students`域进行深度复制,最后返回克隆后的`Course`对象。