第22课 类和对象

文章目录

  • 前言
  • 一、自定义数据类型——类
  • 二、构造函数与析构函数
  • 三、类类型的变量——对象
    • 1. 对象的定义
    • 2. 对象成员的访问
    • 3. 定义一个长方形的类Rectangle
    • 4. 定义一个圆形的类Circle
    • 5. 定义一个数据成员由三角形的3条边构成的三角形类Triangle
  • 课后练习
    • 1. 定义一个简单的日期类Date
    • 3. 定义一个简单的时间类Time


前言

`本课介绍了以下内容。

  1. 类的定义
  2. 构造函数和析构函数
  3. 对象的定义
  4. 对象的访问
  5. 关键字:class, private, protected, public

一、自定义数据类型——类

程序如何实现模块化?我们已经学过函数和结构体,它们一个是算法的模块化,一个是数据的模块化,二者能否结合呢?自然是可以的,类就是一种这样的自定义类型,它里面既可以有数据又可以又函数。
表22-1 成员权限说明

关键字权限说明
private私有成员,可以被同类的其他成员、友元访问通常将数据成员设定为私有,以保护数据
protected保护成员,可被同类的其他成员、友元和子类访问权限介于私有和公有之间
public公有成员,可被任何能看到这个类的地方访问通常将成员函数设定为公有

二、构造函数与析构函数

构造函数是一种特殊的成员函数,一般用来完成成员变量的初始化。
特殊1:构造函数的名称就是类的名称。
特殊2:构造函数没有返回值类型说明。
特殊3:类中可以不定义构造函数,C++编译器会自动添加。

三、类类型的变量——对象

1. 对象的定义

2. 对象成员的访问

3. 定义一个长方形的类Rectangle

#include<iostream>
using namespace std;class Rectangle {private:float width, height;public:Rectangle() {}	//无参构造函数Rectangle(float w, float h) {width = w;height = h;}	//带参构造函数void set_values(float w, float h) {width = w;height = h;}float area() {return width*height;}	// 公有成员函数
};int main() {float a, b;cout << "Input the width and height of the rectangle: " << endl;cin >> a >> b;Rectangle rectangle1;rectangle1.set_values(a, b);cout << "The area of the rectangle is: ";cout << rectangle1.area() << endl;Rectangle rectangle2(4, 5);cout << "The area of the next rectangle is: ";cout << rectangle2.area() << endl;return 0;
}

4. 定义一个圆形的类Circle

#include<iostream>
#include<cmath>	// M_PI
using namespace std;class Circle {private:double r;public:void set_r(double x) {r = x;}double circumference() {return 2*M_PI*r;}double area() {return M_PI*r*r;}
};int main() {Circle circle1;double r;cout << "Input the circle radius: ";cin >> r;circle1.set_r(r);cout << "Circumference: " << circle1.circumference() << endl;cout << "Area: " << circle1.area() << endl;return 0;
}

5. 定义一个数据成员由三角形的3条边构成的三角形类Triangle

#include<iostream>
#include<iomanip>class Triangle {private:float a,b,c;public:Triangle(float edge1, float edge2,float edge3) {if(edge1+edge2>edge3 && edge2+edge3>edge1 && edge1+edge3>edge2) {a = edge1;b = edge2;c = edge3;} else {a = 0;b = 0;c = 0;}}float area() {float s = (a+b+c)/2;return (float)sqrt(s*(s-a)*(s-b)*(s-c));}bool isRightAngle() {if((a*a+b*b==c*c) || (a*a+c*c==b*b) || (b*b+c*c==a*a)) return true;elsereturn false;}bool isIsosceles() {if(a==b || a==c || b==c) return true;else return false;}bool isEquilateralTriangle() {if(a==b && a==c) return true;else return false;}
};int main() {float a,b,c;cout << "请输入三角形的三条边:" << endl;cin >> a >> b >> c;if(a+b>c && b+c>a && a+c>b)		{Triangle triangle1(a, b, c);cout << "三角形的面积是:" << fixed << setprecision(2) << triangle1.area() << endl;if(triangle1.isEquilateralTriangle())cout << "三角形是等边三角形." << endl;else if(triangle1.isIsosceles())cout << "三角形是等腰三角形." << endl;else if(triangle1.isRightAngle())cout << "三角形是直角三角形." << endl;elsecout << "三角形是普通三角形" << endl;}elsecout << "不能构成三角形" << endl;return 0;
}

课后练习

1. 定义一个简单的日期类Date

#include<iostream>
using namespace std;class Date {private:int day, month, year;public:void setDay(int d);void setMonth(int m);void setYear(int y);void setDate(int d, int m, int y);void printDateA();void printDateE();
};void Date::setDay(int d) {day = d;
}
void Date::setMonth(int m) {month = m;
}
void Date::setYear(int y) {year = y;
}void Date::setDate(int d, int m, int y) {day = d;month = m;year = y;
}void Date::printDateA() {cout << month << '/' << day << '/' << year << endl; // American
}void Date::printDateE() {cout << day << '/' << month << '/' << year << endl; // English
}int main() {Date date;date.setDate(25, 12, 2023);date.printDateA();date.printDateE();return 0;
}

3. 定义一个简单的时间类Time

#include<iostream>
using namespace std;class Time {private:int hour=0, minute=0, second=0;public:Time() {}Time(int h, int m, int s) {hour = h;minute = m;second = s;}void printTime() {cout << hour << ':' << minute << ':' << second << endl;}
};int main() {Time time1(9, 0, 0), time2(17, 30, 9);time1.printTime();time2.printTime();return 0;
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/585901.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

大模型系列:OpenAI使用技巧_自定义文本向量化embeding

文章目录 0. Imports1. 输入2. 加载和处理输入数据3. 将数据分成训练和测试集4. 生成合成的负样本5. 计算嵌入和余弦相似度6. 绘制余弦相似度的分布图7. 使用提供的训练数据优化矩阵。8. 绘制训练期间找到的最佳矩阵的前后对比图&#xff0c;展示结果 本笔记本演示了一种将Open…

yolov8实战第四天——yolov8图像分类 ResNet50图像分类(保姆式教程)

yolov8实战第一天——yolov8部署并训练自己的数据集&#xff08;保姆式教程&#xff09;_yolov8训练自己的数据集-CSDN博客在前几天&#xff0c;我们使用yolov8进行了部署&#xff0c;并在目标检测方向上进行自己数据集的训练与测试&#xff0c;今天我们训练下yolov8的图像分类…

LangChain.js 实战系列:入门介绍

&#x1f4dd; LangChain.js 是一个快速开发大模型应用的框架&#xff0c;它提供了一系列强大的功能和工具&#xff0c;使得开发者能够更加高效地构建复杂的应用程序。LangChain.js 实战系列文章将介绍在实际项目中使用 LangChain.js 时的一些方法和技巧。 LangChain.js 是一个…

环形锻件全自动尺寸测量法兰三维检测自动化设备-CASAIM自动化蓝光检测系统

锻造是一种利用锻压机械对金属坯料施加压力&#xff0c;使其产生塑性变形以获得具有一定机械性能、一定形状和尺寸锻件的加工方法&#xff0c;锻压&#xff08;锻造与冲压&#xff09;的两大组成部分之一。 目前客户使用专用直径千分尺、塞规、塞尺等对锻件形状尺寸误差进行测…

使用 JWT(JSON Web 令牌)实现登录身份验证和令牌续订

文档链接 文档链接, PDF中包含一部分宣传大字制作不易还望多多支持互相交流 使用 JWT&#xff08;JSON Web 令牌&#xff09;实现登录身份验证和令牌续订。它将 JWT 与基于会话的身份验证进行了比较&#xff0c;并强调了每种方法的差异、优点和缺点。本文档介绍了基于会话的方…

2022年2月-2023年12月总结

时间&#xff1a;2023年12月30日 14:28 地点&#xff1a;博库书城 0、序言 2023年上半年除了阿里16N拆分&#xff0c;我就不记得其他的事情了&#xff0c;就好像我的记忆只从今年9月份自己的折腾开始。是不是只有自己认真对待过的日子&#xff0c;才会让人深刻呢&#xff1f;…

T527 Android13遥控适配

T527 Android13遥控的适配和官方提供的文档有些不一样&#xff0c;按照官方的文档不能够正常适配到自己的遥控器。 首先确保驱动是否有打开CONFIG_AW_IR_RX和CONFIG_RC_DECODERSy 以及CONFIG_IR_NEC_DECODERm&#xff0c;这个可以在longan/out/t527对应的目录下的.config查看是…

算法每日一题:购买两块巧克力 | 两个最小值的遍历

大家好&#xff0c;我是星恒 今天的每日一题是寻找一个数组中的两个最小值&#xff0c;看似简单的一道题&#xff0c;其实有不少门道&#xff01; 话不多说&#xff0c;我们直接来看&#xff1a; 题目&#xff1a;给你一个整数数组 prices &#xff0c;它表示一个商店里若干巧克…

数模学习day05-插值算法

插值算法有什么作用呢&#xff1f; 答&#xff1a;数模比赛中&#xff0c;常常需要根据已知的函数点进行数据、模型的处理和分析&#xff0c;而有时候现有的数据是极少的&#xff0c;不足以支撑分析的进行&#xff0c;这时就需要使用一些数学的方法&#xff0c;“模拟产生”一些…

Windows下Qt使用MSVC编译出现需要转为unicode的提示

参考 Qt5中文编码问题解决办法_qt5设置编码-CSDN博客 致敬 提示&#xff1a;warning: C4819: 该文件包含不能在当前代码页(936)中表示的字符。请将该文件保存为 Unicode 格式以防止数据丢失。 出现此问题&#xff0c;应该是Unix格式下代码的编码格式是UTF-8&#xff0c;注意不…

SOLIDWORKS Flow Simulation热环境分析

关于室内通风的问题&#xff0c;其实室内通风方面的与我们之前聊到的数据中心通风散热问题相类似&#xff0c;只不过本次会引入一个新的模块——人体舒适度问题&#xff0c;在Flow Simulation中有一个HVAC模块就是专门用于研究人体舒适度的&#xff0c;它可以预测人们在热环境中…

LeetCode75| 哈希表/哈希集合

目录 2215 找出两数组的不同 1207 独一无二的出现次数 1657 确定两个字符串是否接近 2352 相等行列对 2215 找出两数组的不同 class Solution { public:vector<vector<int>> findDifference(vector<int>& nums1, vector<int>& nums2) {un…

力扣题目学习笔记(OC + Swift)206. 反转链表

206. 反转链表 给你单链表的头节点 head &#xff0c;请你反转链表&#xff0c;并返回反转后的链表。 示例 方法一、迭代 在遍历链表时&#xff0c;将当前节点的 next\textit{next}next 指针改为指向前一个节点。由于节点没有引用其前一个节点&#xff0c;因此必须事先存储其…

【Proteus仿真】【51单片机】自动除湿器系统

文章目录 一、功能简介二、软件设计三、实验现象联系作者 一、功能简介 本项目使用Proteus8仿真51单片机控制器&#xff0c;使用按键、LCD1602液晶、DHT11温湿度、继电器除湿模块等。 主要功能&#xff1a; 系统运行后&#xff0c;LCD1602显示DHT11传感器检测的湿度值阈值&am…

面试数据库八股文五问五答第三期

面试数据库八股文五问五答第三期 作者&#xff1a;程序员小白条&#xff0c;个人博客 相信看了本文后&#xff0c;对你的面试是有一定帮助的&#xff01; ⭐点赞⭐收藏⭐不迷路&#xff01;⭐ 1&#xff09;MyIsAm 和 InnoDB 的区别 事务支持&#xff1a;MyISAM不支持事务&a…

开源radishes高仿网易云音乐完整源码,可试听和下载“灰色”歌曲,跨平台的无版权音乐平台

源码介绍 Radishes是项目名称&#xff0c;是由萝卜翻译而来。可以在这里试听和下载“灰色”歌曲&#xff0c;是一个可以跨平台的无版权音乐平台。 萝卜音乐界面和功能参考 windows 网易云音乐界面和 ios 的网易云音乐 安装依赖 cd radishes/ yarn bootstrap 运行项目 web:…

docker-compose Install TeamCity

前言 TeamCity 是一个通用的 CI/CD 软件平台,可实现灵活的工作流程、协作和开发实践。允许在您的 DevOps 流程中成功实现持续集成、持续交付和持续部署。 系统支持 docker download TeamCity TeamCity 文档参考项目离线包百度网盘获取

PPT录制视频的方法,轻松提升演示效果!

在现代工作和学习中&#xff0c;ppt是一种常见的演示工具&#xff0c;而将ppt转化为视频形式更能方便分享和传播。本文将介绍两种ppt录制视频的方法&#xff0c;每一种方法都将有详细的步骤和简要的介绍&#xff0c;通过这些方法&#xff0c;你可以轻松将ppt制作成视频&#xf…

Servlet入门

目录 1.Servlet介绍 1.1什么是Servlet 1.2Servlet的使用方法 1.3Servlet接口的继承结构 2.Servlet快速入门 2.1创建javaweb项目 2.1.1创建maven工程 2.1.2添加webapp目录 2.2添加依赖 2.3创建servlet实例 2.4配置servlet 2.5设置打包方式 2.6部署web项目 3.servl…

SSH -L:安全、便捷、无边界的网络通行证

欢迎来到我的博客&#xff0c;代码的世界里&#xff0c;每一行都是一个故事 SSH -L&#xff1a;安全、便捷、无边界的网络通行证 前言1. SSH -L基础概念SSH -L 的基本语法&#xff1a;端口转发的原理和作用&#xff1a; 2. SSH -L的基本用法远程访问本地示例&#xff1a;访问本…