C++ 面向对象-封装

news2024/9/21 7:43:07

C++ 是一种多范式编程语言,它支持面向对象编程(OOP)范式。面向对象编程是一种程序设计思想,其中程序由对象组成,每个对象都是一个实例,具有数据和相关操作。在C++中,实现面向对象编程主要通过类和对象。

  1. 类(Class):类是一种用户定义的数据类型,用于封装数据和操作。类可以看作是对象的蓝图或模板,描述了对象的属性(成员变量)和行为(成员函数)。

C++ 中的类是一种用户定义的数据类型,用于封装数据和相关操作。类可以看作是一种模板,描述了数据的结构和如何对数据进行操作。在类中,可以定义成员变量(数据)和成员函数(操作)。这样的封装使得数据更安全,也更易于维护和重用。
类的简单实例:

类可以在头文件中进行定义,也可以在源文件中进行定义。

class RolePlayer {
public:
    double m_PosX;
    double m_PosY;
​
private:
    char * m_NPCName;
    int m_nHP;
};

在源文件中进行实例化:

    RolePlayer role;

在C++中,实例化是指创建一个类的对象。通过实例化,你可以使用类中定义的成员变量和成员函数。获得实例化对象就能够对成员变量或成员函数进行访问。

2.对象(Object):对象是类的一个实例,具有类中定义的属性和行为。通过实例化类,可以创建对象,并 在程序中使用它们。

在类中我定义了4个成员变量,但是此时我只能访问两个,这就涉及到成员的访问权限;在C++中,类的成员(包括成员变量和成员函数)可以通过访问权限属性进行限制。这些属性控制了成员在类内和类外的可见性和访问权限。主要的访问权限属性包括:

1.public: 公有成员可以在类的内部和外部被访问。这意味着类的对象以及类的成员函数可以访问公有成员;

上述示例中RolePlayer类中的公有成员:

public:
    double m_PosX;
    double m_PosY;

2.private: 私有成员只能在类的内部被访问,类的外部无法直接访问私有成员。即使是类的其他成员函数也不能直接访问私有成员。所有成员默认是私有的。

上述示例中RolePlayer类中的私有成员:

private:
    char * m_NPCName;
    int m_nHP;

3.protected: 受保护成员可以在类的内部被访问,也可以在派生类中被访问,但在类的外部无法直接访问受保护成员。

补充:

派生类:是通过继承一个或多个已存在的类来创建的新类。派生类继承了其基类(也称为父类或超类)的特性,包括成员变量和成员函数,并且可以添加新的成员变量和成员函数。这种继承机制允许在不重复编写相同代码的情况下,扩展和修改现有类的功能。

在RolePlayer类中添加受保护的成员:

protected:
    int m_PP;

发现在实例化出来的role对象中依旧无法进行访问;

事实上若是要对私有成员或者受保护成员进行修改,一般来说会在提供一个公共成员函数接口进行成员的修改或访问;如此时我要对私有成员变量进行赋值(修改)或访问,那么此时就可以编辑一个公共的赋值(修改)函数或和一个公共的访问函数;受保护成员变量同理。

public:
    //修改:
    void SetHP(int HP) {
        m_nHP = HP;
    }
​
    //访问:
    int GetHP() {
        return m_nHP;
    }
成员函数的使用:
    RolePlayer role;
    role.m_PosX = 3.222;
    role.m_PosY = 3.233;
​
    role.SetHP(44);
    std::cout << role.GetHP() << std::endl;

role.SetHP(44);对role对象的m_nHP 进行传值,传入的值为44;

role.GetHP():获取role对象的m_nHP值,获得的值为44;

在类中也可以定义对象相关的行为,如我在类中定义Attack()方法

此时IDE会自动在与头文件同名的.cpp文件中进行行为方法的定义;

此时我们可以注意到IDE自动就将类的类名设置为Attack()方法的命名空间,事实上,在某种程度上,类可以被视为一个单独的命名空间,但它们并不完全等同于命名空间。

总结:

这些权限属性允许你控制成员的访问级别,从而提高了封装性和安全性。通常情况下,成员变量应该被声明为私有的,而成员函数可以根据需要选择公有、私有或受保护。

上述内容就涉及到C++面向对象编程的第一大特性----封装。

封装(Encapsulation):封装是一种将数据和操作绑定在一起的机制,通过将数据成员声明为私有的并提供公有的成员函数来实现。这样可以隐藏数据的具体实现细节,并确保数据的安全性。

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

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

相关文章

物理机中没有VMNet1和VMNet8虚拟网卡

控制面板——网络连接——网络适配器 VMware Network Adapter VMnet1 VMware Network Adapter VMnet8 如果没有这两个虚拟网卡&#xff0c;虚拟机的网络会出现问题 # 解决办法-恢复虚拟网卡默认设置 1、下载并打开ccleaner&#xff0c;ccleaner官网&#xff1a;CCleaner M…

jdbc操作数据库 and 一个商品管理页面

文章目录 1. 介绍1.1 应用知识介绍1.2 项目介绍 2. 文件目录2.1 目录2.2 介绍以下&#xff08;从上到下&#xff09; 3. 相关代码3.1 DBConnection.java3.2 MysqlUtil.java3.3 AddServlet.java3.4 CommodityServlet.java3.5 DelectServlet.java3.6 SelectByIdServlet.java3.7 S…

2024 OceanBase 开发者大会:OceanBase 4.3正式发布,打造PB级实时分析数据库

4月20日&#xff0c;2024 OceanBase开发者大会盛大召开&#xff0c;吸引了50余位业界知名的数据库专家和爱好者&#xff0c;以及来自全国各地的近600名开发者齐聚一堂。他们围绕一体化、多模、TP与AP融合等前沿技术趋势展开深入讨论&#xff0c;分享场景探索的经验和最佳实践&a…

同旺科技 USB TO SPI / I2C适配器读写24LC256--字节写

所需设备&#xff1a; 1、USB 转 SPI I2C 适配器&#xff1b;内附链接 2、24LC256芯片 适应于同旺科技 USB TO SPI / I2C适配器升级版、专业版&#xff1b; 00地址写入一个字节数据AA&#xff0c;并读回验证&#xff1b; 单字节写时序&#xff1a; 读字节时序&#xff1a; …

架构师系列-MYSQL调优(七)- 索引单表优化案例

索引单表优化案例 1. 建表 创建表 插入数据 下面是一张用户通讯表的表结构信息,这张表来源于真实企业的实际项目中,有接近500万条数据. CREATE TABLE user_contacts (id INT(11) NOT NULL AUTO_INCREMENT,user_id INT(11) DEFAULT NULL COMMENT 用户标识,mobile VARCHAR(50…

2016年新华三杯复赛实验试题

2016年新华三杯复赛实验试题 拓扑图 配置需求 考生根据以下配置需求在 HCL 中的设备上进行相关配置。 以太网接口配置 将 S1、S2 的以太网接口 G1/0/1 至 G1/0/16 的模式用命令 combo enable copper 激活为电口。 虚拟局域网 为了减少广播&#xff0c;需要规划并配置 VLA…

Zabbix监控系统:基础配置及部署代理服务器

目录 前言 一、自定义监控内容 1、在客户端创建自定义key 2、在服务端验证新建的监控项 3、在web界面创建自定义监控项模版 3.1 创建模版 3.2 创建应用集&#xff08;用于管理监控项&#xff09; 3.3 创建监控项 3.4 创建触发器 3.5 创建图形 3.6 将主机与模板关联…

利用selenium发挥vip残存的价值

历史版本谷歌浏览器驱动下载地址 https://chromedriver.storage.googleapis.com/index.html 找到与你电脑当前谷歌浏览器版本一致的驱动然后下载下来(大版本一致即可)。我本地版本是 99.0.04844.51 我这里把 chromedriver 放到 /usr/local/bin 下面了。 启动测试窗口 这里需要…

【软件测试】认识测试|测试岗位|软件测试和开发的区别|优秀的测试人员需要具备的素质

一、什么是测试 测试在⽣活中处处可⻅ 1.生活中的测试场景 案例⼀&#xff1a;对某款购物软件进⾏测试 *启动测试&#xff1a;点击软件图标&#xff0c;测试软件是否可以正常打开 搜索测试&#xff1a;点击输入框&#xff0c;输入关键词&#xff0c;点击搜索 商品测试&#…

【Linux】IO多路转接技术Epoll的使用

【Linux】IO多路转接技术Epoll的使用 文章目录 【Linux】IO多路转接技术Epoll的使用前言正文接口介绍工作原理LT模式与ET模式边缘触发&#xff08;ET&#xff09;水平触发&#xff08;LT&#xff09; 理解ET模式和非阻塞文件描述符ET模式epoll实现TCP服务器简单地封装epoll系统…

python创建线程和结束线程

&#x1f47d;发现宝藏 前些天发现了一个巨牛的人工智能学习网站&#xff0c;通俗易懂&#xff0c;风趣幽默&#xff0c;忍不住分享一下给大家。【点击进入巨牛的人工智能学习网站】。 python创建线程和结束线程 在 Python 中&#xff0c;线程是一种轻量级的执行单元&#xff…

【C++学习】STL之空间配置器之一级空间配置器

文章目录 &#x1f4ca;什么是空间配置器✈STL 提供六大组件的了解&#x1f440;为什么需要空间配置器&#x1f44d;SGI-STL空间配置器实现原理&#x1f302;一级空间配置器的实现 &#x1f4ca;什么是空间配置器 空间配置器&#xff0c;顾名思义就是为各个容器高效的管理空间…

“五之链”第十六期沙龙活动在呆马科技成功举办

2024年4月19日&#xff0c;由临沂呆码区块链网络科技有限公司&#xff08;呆马科技&#xff09;承办的第十六期“五之链”物流主题沙龙活动成功举办。此次活动邀请了政府相关部门、知名科研院所、物流企业等20余家单位参与&#xff0c;共同探讨物流数据要素流通与智能应用的发展…

C语言----链表

大家好&#xff0c;今天我们来看看C语言中的一个重要知识&#xff0c;链表。当然大家可以先从名字中看出来。就是一些表格用链子连接。那么大家是否想到了我们以前学的数组&#xff0c;因为数组也是相连的呀。是吧。但是链表与数组还是有区别的&#xff0c;那么链表是什么有什么…

uniApp项目总结

前言 大半年的时间&#xff0c;项目从秋天到春天&#xff0c;从管理后台到APP再到数据大屏&#xff0c;技术栈从vue3到uniApp再到nuxt3&#xff0c;需求不停的改&#xff0c;注释掉代码都快到项目总体的三分之一。 一&#xff0c;项目技术栈分析 1.1 项目框架 当前&#xf…

树与二叉树的学习笔记

树与二叉树 在之前的学习中&#xff0c;我们一直学习的是一个线性表&#xff0c;数组和链表这两种都是一对一的线性表&#xff0c;而在生活中的更多情况我们要考虑一对多的情况&#xff0c;这时候就引申出了我的新的数据结构那就是树&#xff0c;而树经过一些规矩的指定也就成为…

秒懂图神经网络(GNN)

​ 图神经网络&#xff08;GNN&#xff09;是一种深度学习模型&#xff0c;专门为处理图结构数据而设计。在现实世界中&#xff0c;许多数据都可以通过图来表示&#xff0c;比如社交网络中人与人之间的联系、分子结构中的原子连接等。图由顶点&#xff08;或称为节点&#xff0…

LLM使用方法介绍,持续更新

LLM使用方法介绍&#xff0c;持续更新 1. LLM本地搭建与运行 1. Ollama的安装 网址&#xff1a;https://ollama.com/点击Download选择对应的操作系统下载安装软件&#xff0c;软件默认安装在C盘无法选择路径&#xff1b; 安装完成后&#xff0c;WinR进入终端执行&#xff1a…

推荐一个在线stable-diffusion-webui,通过文字生成动画视频的网站-Ai白日梦

推荐一个可以通过文字生成动画视频的网站&#xff0c;目前网站处于公测中&#xff0c;应该是免费的。 点击新建作品 使用kimi或者gpt生成一个故事脚本 输入故事正文 新建作品&#xff0c;选择风格 我这里显示了六个风格&#xff0c;可以根据自己需要选一个 选择配音&…

54、图论-实现Trie前缀树

思路&#xff1a; 主要是构建一个trie前缀树结构。如果构建呢&#xff1f;看题意&#xff0c;应该当前节点对象下有几个属性&#xff1a; 1、next节点数组 2、是否为结尾 3、当前值 代码如下&#xff1a; class Trie {class Node {boolean end;Node[] nexts;public Node(…