[C++核心编程](四):类和对象——封装

news2024/11/16 2:35:56

目录

封装

访问权限

struct和class的区别

成员属性设置为私有

设计案例


C++面向对象的三大特性:封装、继承、多态

C++认为万事万物皆为对象,对象上有其属性和行为!!

封装

   意义:

  • 将属性和行为作为一个整体,表现生活中的事物
  • 将属性和行为加以权限控制   

   语法:class 类名 { 访问权限 : 属性 / 行为} ;

#include <iostream>
using namespace std;

const double PI = 3.14;
//设计一个圆类,求圆的周长   2 * PI * 半径

class Cirle
{
    //访问权限
public:
    //属性
    int m_R;
    //行为
    double calculate()
    {
         return 2 * PI * m_R;
    }
} ;

int main(void)
{
    Cirle mcirle;

    mcirle.m_R = 10;
    cout << "圆周长:" << mcirle.calculate() << endl;
    return 0;
}

访问权限

权限关键词说明
公共权限public类内可以访问  类外可以访问
保护权限protected类内可以访问  类外不可以访问   子类可以访问父类
私有权限private类内可以访问  类外不可以访问  子类不能访问父类

struct和class的区别

        唯一区别:默认的访问权限不同,struct为公有,class为私有

成员属性设置为私有

   优点:

  • 自行控制读写权限
  • 对于写权限,可以检测数据的有效性

设计案例

#include <iostream>

using namespace std;

//立方体类(m_L m_H m_W),求出其面积和体积,分别用全局函数和成员函数判断两个立方体是否相等
class Cube
{
private:
	int m_L;
	int m_H;
	int m_W;
public:
	void set_cube_L(int Lvalue)
	{
		m_L = Lvalue;
	}
	int get_cube_L(void)
	{
		return m_L;
	}

	void set_cube_H(int Hvalue)
	{
		m_H = Hvalue;
	}
	int get_cube_H(void)
	{
		return m_H;
	}

	void set_cube_W(int Wvalue)
	{
		m_W = Wvalue;
	}
	int get_cube_W(void)
	{
		return m_W;
	}
	int calculate_S() //面积
	{
		return 2 * m_L * m_W + 2 * m_W * m_H + 2 * m_L * m_H;
	}

	int calculate_V() // 体积
	{
		return m_L * m_H * m_W;
	}

	void isSameByClass(Cube &c)
	{
		if (get_cube_H() == c.get_cube_H() && get_cube_W() == c.get_cube_W() && get_cube_L() == c.get_cube_L())
		{
			cout << "成员函数判断:c1 and c2 相等" << endl;
		}
		else
		{
			cout << "成员函数判断:c1 and c2 不相等" << endl;
		}
	}
};

//全局函数判断两个立方体是否相等
void isSame(Cube& c1, Cube& c2)
{
	if (c1.get_cube_H() == c2.get_cube_H() && c1.get_cube_W() == c2.get_cube_W() && c1.get_cube_L() == c2.get_cube_L())
	{
		cout << "全局函数判断:c1 and c2 相等" << endl;
	}
	else
	{
		cout << "全局函数判断:c1 and c2 不相等" << endl;
	}
}

int main(void)
{
	Cube c1, c2;
	c1.set_cube_H(10);
	c1.set_cube_L(10);
	c1.set_cube_W(10);

	c2.set_cube_H(10);
	c2.set_cube_L(10);
	c2.set_cube_W(10);

	cout << "c1的面积是:" << c1.calculate_S() << endl;
	cout << "c1的体积是:" << c1.calculate_V() << endl;
	
	isSame(c1, c2);
	c1.isSameByClass(c2);

	system("pause");
	return 0;
}

推荐阅读:[C++核心编程](三):函数高级

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

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

相关文章

【学习心得】解决无限debugger的常用方法

一、什么是无限debugger 有些网站为了防止爬虫或其他恶意行为&#xff0c;会故意设置无限debugger作为一种简单的反爬机制&#xff0c;它会在开发者工具打开的情况下不断暂停执行。这对于想要分析其他代码逻辑、排查问题或进行正常开发调试工作的开发者来说极为不便。 二、解决…

图文详解:在虚拟机上安装Win7,超详细!!!

一.准备 1.虚拟机&#xff1a; https://pan.xunlei.com/s/VNpZ_9c2AdrnUW1YWNdhBLW-A1?pwdyp6b# 2.win7的iOS&#xff1a; https://pan.xunlei.com/s/VNpZd61K6a7cDG3YkI_3oVbUA1?pwdyrfp# 二.安装配置 三.配置Win7 1.记得输入原先下载的镜像文件 2.那我们选择自定义 3…

c++之旅——第二弹

大家好啊&#xff0c;这里是c之旅第二弹&#xff0c;跟随我的步伐来开始这一篇的学习吧&#xff01; 如果有知识性错误&#xff0c;欢迎各位指正&#xff01;&#xff01;一起加油&#xff01;&#xff01; 创作不易&#xff0c;希望大家多多支持哦&#xff01; 一、内存四区…

2024-02学习笔记

1.当我们向Set集合中添加一个已经存在的元素时 当我们向Set集合中添加一个已经存在的元素时&#xff0c;Set集合会如何处理呢&#xff1f;实际上&#xff0c;Set集合不会将重复的元素添加到集合中。当我们向Set集合中添加一个元素时&#xff0c;Set集合会首先判断该元素是否已…

支持向量机 SVM | 线性可分:公式推导

目录 一. SVM的优越性二. SVM算法推导小节概念 在开始讲述SVM算法之前&#xff0c;我们先来看一段定义&#xff1a; 支持向量机(Support VecorMachine, SVM)本身是一个二元分类算法&#xff0c;支持线性分类和非线性分类的分类应用&#xff0c;同时通过OvR或者OvO的方式可以应用…

Sora:探索大型视觉模型的前世今生、技术内核及未来趋势

Sora&#xff0c;一款由OpenAI在2024年2月推出的创新性文生视频的生成式AI模型&#xff0c;能够依据文字说明&#xff0c;创作出既真实又富有想象力的场景视频&#xff0c;展现了其在模拟现实世界方面的巨大潜能。本文基于公开技术文档和逆向工程分析&#xff0c;全面审视了Sor…

一文搞懂浏览器缓存机制

文章目录 概述强制缓存协商缓存总结参考文章 概述 浏览器的缓存机制也就是我们说的HTTP缓存机制&#xff0c;其机制是根据HTTP报文的缓存标识进行的 浏览器第一次向服务器发送HTTP请求, 浏览器拿到请求结果后&#xff0c;会根据响应报文的缓存标识&#xff0c;决定是否进行缓存…

【学习总结】什么是DoS和DDoS

[Q&A] 什么是DoS DoS 是 “Denial of Service”&#xff08;拒绝服务&#xff09;的缩写&#xff0c;它是一种网络攻击方式&#xff0c;其目的是使目标计算机或网络资源无法为合法用户提供正常的服务。通过向目标系统发送大量请求、消耗其带宽、处理器或内存等资源&#…

【Linux网络命令系列】ping curl telnet三剑客

&#x1f49d;&#x1f49d;&#x1f49d;欢迎来到我的博客&#xff0c;很高兴能够在这里和您见面&#xff01;希望您在这里可以感受到一份轻松愉快的氛围&#xff0c;不仅可以获得有趣的内容和知识&#xff0c;也可以畅所欲言、分享您的想法和见解。 推荐:kwan 的首页,持续学…

前后端分离vue+nodejs高校教室资源预约管理系统4e80m

本系统的设计与实现共包含9个表:分别是配置文件信息表&#xff0c;教师信息表&#xff0c;教室类型信息表&#xff0c;教室信息信息表&#xff0c;教室预约信息表&#xff0c;系统公告信息表&#xff0c;token表信息表&#xff0c;用户表信息表&#xff0c;学生信息表&#xff…

matplotlib散点图

matplotlib散点图 假设通过爬虫你获取到了北京2016年3, 10月份每天白天的最高气温(分别位于列表a, b), 那么此时如何寻找出气温和随时间(天)变化的某种规律? from matplotlib import pyplot as pltx_3 range(1, 32) x_10 range(51, 82)y_3 [11,17,16,11,12,11,12,6,6,7,8…

二、数据结构——单链表,双链表,栈,队列,单调栈,单调队列,KMP,Trie,并查集,堆,哈希表等内容。

对于链表来说&#xff0c;由于new操作时间太长&#xff0c;因此&#xff0c;算法题中一般使用静态链表。 1.单链表 采用数组实现单链表&#xff0c;可以直接开两个数据&#xff0c;一个数组存放数值&#xff0c;另外一个数据存放下一个元素&#xff08;指针&#xff09;。 示…

klipper api测试脚本whconsole.py

1、whconsole.py简单介绍 whconsole.py用于测试klipper的对外接口api&#xff0c;其实是连接klipper的uds服务&#xff08;Unix Domain Socket&#xff09;&#xff0c;官方也有介绍API 服务器 - Klipper 文档。 需要注意是的whconsole.py脚本启动不能使用Python3&#xff0c;…

想要调用淘宝开放平台API,没有申请应用怎么办?

用淘宝自定义API接口可以访问淘宝开放平台API。 custom-自定义API操作 taobao.custom 公共参数 注册账号获取API请求地址 名称类型必须描述keyString是调用key&#xff08;必须以GET方式拼接在URL中&#xff09;secretString是调用密钥api_nameString是API接口名称&#xf…

【计算机网络】深度学习HTTPS协议

&#x1f493; 博客主页&#xff1a;从零开始的-CodeNinja之路 ⏩ 收录文章&#xff1a;【计算机网络】深度学习HTTPS协议 &#x1f389;欢迎大家点赞&#x1f44d;评论&#x1f4dd;收藏⭐文章 目录 一:HTTPS是什么二:HTTPS的工作过程三:对称加密四:非对称加密五:中间人攻击1…

精读《用 Babel 创造自定义 JS 语法》

1 引言 在写这次精读之前&#xff0c;我想谈谈前端精读可以为读者带来哪些价值&#xff0c;以及如何评判这些价值。 前端精读已经写到第 123 篇了&#xff0c;大家已经不必担心它突然停止更新&#xff0c;因为我已养成每周写一篇文章的习惯&#xff0c;而读者也养成了每周看一…

C++进阶(二) 多态

一、多态的概念 多态的概念&#xff1a;通俗来说&#xff0c;就是多种形态&#xff0c; 具体点就是去完成某个行为&#xff0c;当不同的对象去完成时会 产生出不同的状态。举个栗子&#xff1a;比如买票这个行为&#xff0c;当普通人买票时&#xff0c;是全价买票&#xff1b;学…

无人机镜头稳定的原理和相关算法

无人机的镜头稳定主要基于两个关键技术&#xff1a;镜头平衡技术和实时电子稳像。无人机镜头稳定的原理和相关算法主要是通过镜头平衡技术和实时电子稳像技术来保持摄像镜头的稳定性&#xff0c;从而拍摄出清晰、稳定的画面。无人机镜头稳定的原理主要是通过传感器和算法来实现…

基于SpringBoot的在线拍卖系统(附项目源码+论文)

摘要 在线拍卖系统&#xff0c;主要的模块包括管理员&#xff1b;首页、个人中心、用户管理、商品类型管理、拍卖商品管理、历史竞拍管理、竞拍订单管理、留言板管理、系统管理&#xff0c;用户&#xff1b;首页、个人中心、历史竞拍管理、竞拍订单管理、留言板管理&#xff0…

SSH教程

ssh 是远程连接的利器, 可以说凡是涉及到 linux 服务器, ssh 就是一个绕不开的话题. 本文作为一个教程, 尽可能详细的帮助读者设置 ssh, 并给出一些常用的 ssh 配置方法 (主要用于 linux 系统的远程登录和文件传输). 1. 简介 ssh 分为两个部分, sshd 服务端和 ssh 客户端. ssh…