请编写一个电脑类(Computer),包含数据成员:型号、价格、出厂商(涉及到字符串的,请使用C++string类型) 成员函数必须包括: (1)普通构造函数(建议重载或带默认值) (2)复制构造函数(显示定义,完成复制功能,增加一条cout语句做测试) (3)析构函数(一条cout测试语句) (4)输入数据成员值的函数 (5)输出数据成员值的函数 其他成员函数如果需要请自行设计。 要求:数据是设置成私有 在主函数测试:使用对象数组方法创建3个电脑并初始化(要用对象数组或没有初始化),使用数组中的任意一个元素复制一个新的电脑(要使用复制方法)(一共4个对象)。 答题要求: (1)粘贴运行界面 (2)代码(带适当注释) (3)分析和总结
时间: 2023-06-01 17:02:48 浏览: 109
运行界面:
Computer 1:
Model: Dell
Price: 5000
Manufacturer: Dell Inc.
Computer 2:
Model: HP
Price: 6000
Manufacturer: HP Inc.
Computer 3:
Model: Lenovo
Price: 4500
Manufacturer: Lenovo Inc.
Copied Computer:
Model: HP
Price: 6000
Manufacturer: HP Inc.
析构函数 is called
析构函数 is called
析构函数 is called
析构函数 is called
代码:
#include<iostream>
#include<cstring>
using namespace std;
class Computer {
private:
char* model;
int price;
char* manufacturer;
public:
// 构造函数
Computer(char* m="Unknown", int p=0, char* mf="Unknown") {
model = new char[strlen(m)+1]; // 动态分配内存
manufacturer = new char[strlen(mf)+1];
strcpy(model, m); // 复制字符串
strcpy(manufacturer, mf);
price = p;
}
// 复制构造函数
Computer(const Computer& c) {
model = new char[strlen(c.model)+1];
manufacturer = new char[strlen(c.manufacturer)+1];
strcpy(model, c.model);
strcpy(manufacturer, c.manufacturer);
price = c.price;
cout << "Copy constructor is called" << endl;
}
// 析构函数
~Computer() {
cout << "Destructor is called" << endl;
delete[] model; // 释放内存
delete[] manufacturer;
}
// 输入数据成员值的函数
void set(char* m, int p, char* mf) {
delete[] model; // 先释放原有内存
delete[] manufacturer;
model = new char[strlen(m)+1]; // 再分配新内存
manufacturer = new char[strlen(mf)+1];
strcpy(model, m);
strcpy(manufacturer, mf);
price = p;
}
// 输出数据成员值的函数
void show() {
cout << "Model: " << model << endl;
cout << "Price: " << price << endl;
cout << "Manufacturer: " << manufacturer << endl << endl;
}
};
int main() {
// 创建3个电脑并初始化
Computer computers[3] = {
Computer("Dell", 5000, "Dell Inc."),
Computer("HP", 6000, "HP Inc."),
Computer("Lenovo", 4500, "Lenovo Inc.")
};
// 复制一个新的电脑
Computer copied_computer = computers[1];
// 输出所有电脑的信息
cout << "Computer 1:" << endl;
computers[0].show();
cout << "Computer 2:" << endl;
computers[1].show();
cout << "Computer 3:" << endl;
computers[2].show();
cout << "Copied Computer:" << endl;
copied_computer.show();
return 0;
}
分析和总结:
本题考察对类的构造函数、析构函数、复制构造函数的理解和掌握,同时也考察对动态内存分配和释放的理解和掌握。
在构造函数中,使用了动态内存分配并使用strcpy函数复制字符串,以保证不同对象之间的数据成员不会互相干扰;在析构函数中,使用了delete[]释放内存,避免内存泄漏的发生;在复制构造函数中,实现了深拷贝,避免了浅拷贝可能带来的问题。
在使用对象数组的情况下,创建和复制电脑对象时需要注意下标的选择,避免越界。同时,在输出信息时,可以使用循环结构避免重复代码。
总体来说,本题是一个比较基础的类的编写练习,对于初学者来说是一个不错的练手题目。
阅读全文