### 实验一 类和对象实验知识点解析 #### 一、实验目的详解 1. **类的定义** - 类是一种用户自定义的数据类型,它允许我们定义包含数据成员(属性)和成员函数(方法)的对象。 - 类的定义通常以关键字`class`开始,后跟类名和大括号包裹的类体。 - 示例: ```cpp class ClassName { // 成员变量和成员函数 }; ``` 2. **类对象的使用** - 类的实例称为对象,可以通过类名后面加上一对圆括号来创建对象。 - 示例: ```cpp ClassName obj; ``` 3. **类成员变量的定义和使用** - 成员变量是类中的数据字段,用于存储类的状态信息。 - 成员变量可以在类内声明,也可以在类外初始化。 - 示例: ```cpp class CDate { private: int month; int day; int year; }; ``` 4. **类成员函数的定义和使用** - 成员函数是类内的函数,用于定义类的行为。 - 成员函数可以定义在类内或类外,但必须声明在类内。 - 示例: ```cpp class CDate { public: void Print(); }; void CDate::Print() { cout << month << "/" << day << "/" << year << endl; } ``` 5. **理解类的作用域** - 类的作用域是指类内定义的成员变量和成员函数的有效范围。 - 类的成员变量和成员函数只能在类内部或者通过类的成员函数被访问。 6. **理解类的声明** - 类的声明定义了类的结构,包括所有成员变量和成员函数的声明。 - 示例: ```cpp class CDate { // 成员变量和成员函数的声明 }; ``` 7. **理解类中 private 和 public 权限的声明依据** - `private`成员只能被类的成员函数访问。 - `public`成员可以被类的成员函数以及类的外部代码访问。 - 示例: ```cpp class CDate { private: int month; int day; int year; public: void Print(); }; ``` #### 二、实验内容分析 1. **程序理解和运行** - **问题一** - 程序不能通过编译,因为`Set`函数是在类的`private`部分声明的,而在`main`函数中尝试直接调用`a.Set()`是非法的。 - 解决方案:将`Set`函数移到`public`部分或者通过成员函数调用。 - 示例修正: ```cpp class CDate { // ... public: void Set(int m, int d, int y); // ... }; void CDate::Set(int m, int d, int y) { month = m; day = d; year = y; } ``` - **问题二** - 成员函数:`Set`, `IsLeapYear`, `Print` - 成员变量:`month`, `day`, `year` - 访问权限:`Set`和`Print`为`public`,`IsLeapYear`未显式指定权限,默认为`private`。 - **问题三** - 语句`CDate a;`的意思是创建了一个名为`a`的`CDate`类的对象。 2. **程序检查与修正** - 错误: - `set_time`和`show_time`函数应该定义在`Time`类内。 - 主函数`main`中直接调用了`set_time`和`show_time`,而不是通过`Time`对象。 - 修正示例: ```cpp #include <iostream> using namespace std; class Time { private: int hour; int minute; int sec; public: void set_time(); void show_time(); }; void Time::set_time() { cin >> this->hour; cin >> this->minute; cin >> this->sec; } void Time::show_time() { cout << this->hour << ":" << this->minute << ":" << this->sec << endl; } int main() { Time t1; t1.set_time(); t1.show_time(); return 0; } ``` 3. **程序设计** - **长方柱体积计算** - 定义类`Cuboid`,包含成员变量`length`, `width`, `height`。 - 成员函数:`inputData`, `calculateVolume`, `displayVolume`。 - 示例: ```cpp class Cuboid { private: double length; double width; double height; public: void inputData(); double calculateVolume(); void displayVolume(); }; void Cuboid::inputData() { cout << "Enter length, width, and height: "; cin >> length >> width >> height; } double Cuboid::calculateVolume() { return length * width * height; } void Cuboid::displayVolume() { cout << "Volume: " << calculateVolume() << endl; } int main() { Cuboid cuboids[3]; for (int i = 0; i < 3; i++) { cuboids[i].inputData(); cuboids[i].displayVolume(); } return 0; } ``` - **复数类设计** - 定义类`Complex`,包含成员变量`real`和`imaginary`。 - 成员函数:`setComplex`, `displayComplex`。 - 示例: ```cpp class Complex { private: double real; double imaginary; public: void setComplex(double r, double i); void displayComplex(); }; void Complex::setComplex(double r, double i) { real = r; imaginary = i; } void Complex::displayComplex() { cout << real << " + " << imaginary << "i" << endl; } int main() { Complex c1, *c2 = new Complex(), c3; c1.setComplex(3.0, 4.0); c2->setComplex(5.0, 6.0); c3.setComplex(7.0, 8.0); c1.displayComplex(); c2->displayComplex(); c3.displayComplex(); delete c2; return 0; } ``` 本实验通过具体的编程任务,让学生深入理解面向对象编程中的类和对象的基本概念,包括如何定义类、创建对象、定义成员变量和成员函数等。通过这些练习,学生能够掌握类的声明和使用,理解成员变量和成员函数的作用域及访问权限,从而更好地应用面向对象的思想进行软件开发。
![docx](https://img-home.csdnimg.cn/images/20210720083331.png)
![docx](https://img-home.csdnimg.cn/images/20210720083331.png)
![zip](https://img-home.csdnimg.cn/images/20210720083736.png)
![docx](https://img-home.csdnimg.cn/images/20210720083331.png)
![docx](https://img-home.csdnimg.cn/images/20210720083331.png)
![docx](https://img-home.csdnimg.cn/images/20210720083331.png)
![docx](https://img-home.csdnimg.cn/images/20210720083331.png)
![docx](https://img-home.csdnimg.cn/images/20210720083331.png)
![docx](https://img-home.csdnimg.cn/images/20210720083331.png)
![docx](https://img-home.csdnimg.cn/images/20210720083331.png)
![docx](https://img-home.csdnimg.cn/images/20210720083331.png)
![docx](https://img-home.csdnimg.cn/images/20210720083331.png)
![docx](https://img-home.csdnimg.cn/images/20210720083331.png)
![docx](https://img-home.csdnimg.cn/images/20210720083331.png)
![docx](https://img-home.csdnimg.cn/images/20210720083331.png)
![docx](https://img-home.csdnimg.cn/images/20210720083331.png)
![zip](https://img-home.csdnimg.cn/images/20210720083736.png)
![avatar-default](https://csdnimg.cn/release/downloadcmsfe/public/img/lazyLogo2.1882d7f4.png)
![avatar](https://profile-avatar.csdnimg.cn/default.jpg!1)
- 粉丝: 0
- 资源: 1
我的内容管理 展开
我的资源 快来上传第一个资源
我的收益
登录查看自己的收益我的积分 登录查看自己的积分
我的C币 登录后查看C币余额
我的收藏
我的下载
下载帮助
![voice](https://csdnimg.cn/release/downloadcmsfe/public/img/voice.245cc511.png)
![center-task](https://csdnimg.cn/release/downloadcmsfe/public/img/center-task.c2eda91a.png)
最新资源
![feedback](https://img-home.csdnimg.cn/images/20220527035711.png)
![feedback-tip](https://img-home.csdnimg.cn/images/20220527035111.png)
![dialog-icon](https://csdnimg.cn/release/downloadcmsfe/public/img/green-success.6a4acb44.png)