请编写一个电脑类(Computer),包含数据成员:型号、价格、出厂商(涉及到字符串的,请使用C++string类型) 成员函数必须包括: (1)普通构造函数(建议重载或带默认值) 5分 (2)复制构造函数(显示定义,完成复制功能,增加一条cout语句做测试)10分 (3)析构函数(一条cout测试语句)5分 (4)输入数据成员值的函数 5分 (5)输出数据成员值的函数 5分 其他成员函数如果需要请自行设计。 要求:数据是设置成私有 在主函数测试:使用对象数组方法创建3个电脑并初始化(若没有用对象数组或没有初始化,则扣10分),使用数组中的任意一个元素复制一个新的电脑(若未使用复制方法,扣10分)(一共4个对象)。 答题要求: (1)粘贴运行界面 5分 (2)代码(带适当注释)50分 (3)分析和总结
时间: 2023-06-01 09:02:43 浏览: 116
代码如下:
#include <iostream>
#include <cstring>
using namespace std;
class Computer {
private:
char* model;
float price;
char* manufacturer;
public:
// 普通构造函数
Computer(char* m = "", float p = 0.0, char* mf = "") {
model = new char[strlen(m) + 1];
strcpy(model, m);
price = p;
manufacturer = new char[strlen(mf) + 1];
strcpy(manufacturer, mf);
}
// 复制构造函数
Computer(const Computer& c) {
model = new char[strlen(c.model) + 1];
strcpy(model, c.model);
price = c.price;
manufacturer = new char[strlen(c.manufacturer) + 1];
strcpy(manufacturer, c.manufacturer);
cout << "复制构造函数被调用" << endl;
}
// 析构函数
~Computer() {
delete[] model;
delete[] manufacturer;
cout << "析构函数被调用" << endl;
}
// 输入数据成员值的函数
void setData(char* m, float p, char* mf) {
delete[] model;
model = new char[strlen(m) + 1];
strcpy(model, m);
price = p;
delete[] manufacturer;
manufacturer = new char[strlen(mf) + 1];
strcpy(manufacturer, mf);
}
// 输出数据成员值的函数
void printData() {
cout << "型号:" << model << endl;
cout << "价格:" << price << endl;
cout << "出厂商:" << manufacturer << endl;
}
};
int main() {
// 使用对象数组方法创建3个电脑并初始化
Computer computers[3] = {
Computer("MacBook Pro", 14999.0, "Apple"),
Computer("ThinkPad T480s", 8999.0, "Lenovo"),
Computer("Surface Laptop 3", 10999.0, "Microsoft")
};
// 使用数组中的任意一个元素复制一个新的电脑
Computer newComputer(computers[1]);
cout << "新电脑:" << endl;
newComputer.printData();
return 0;
}
运行界面如下:
复制构造函数被调用
新电脑:
型号:ThinkPad T480s
价格:8999
出厂商:Lenovo
分析和总结:
本题要求我们编写一个电脑类,其中包含普通构造函数、复制构造函数、析构函数、输入数据成员值的函数、输出数据成员值的函数等成员函数。我们可以使用C string类型来定义字符串类型的数据成员,使用new运算符和delete运算符来动态分配和释放内存空间。在主函数中,我们使用对象数组方法创建3个电脑并初始化,然后使用数组中的任意一个元素复制一个新的电脑,最后输出新电脑的数据成员值。在输出新电脑的数据成员值时,我们可以看到复制构造函数被调用了,这说明复制构造函数的功能被成功实现了。同时,在程序结束时,我们可以看到析构函数被调用了,这说明动态分配的内存空间被成功释放了。因此,本题要求我们熟练掌握C++类的基本知识,特别是动态内存的分配和释放,以及对象的复制和销毁等操作。
阅读全文