Day 13 C++ 封装

这篇具有很好参考价值的文章主要介绍了Day 13 C++ 封装。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

目录

什么是封装

封装的意义

1.将属性和行为作为一个整体,表现生活中的事物

2.对属性和行为进行权限控制

如何封装

封装语法

封装的基本步骤

定义类

声明成员变量

声明成员函数

实现成员函数

使用封装的类

示例

struct和class区别

默认成员访问权限

继承方式


什么是封装

 在C++中,封装是一种面向对象编程的核心概念,也是C++面向对象三大特性之一通过使用类和访问控制修饰符来实现数据和方法的封装。

封装的意义

1.将属性和行为作为一个整体,表现生活中的事物

封装将一个对象的属性(数据成员)和行为(成员函数)组合成一个整体,以表示现实生活中的事物。对象的属性描述了该对象的状态和特征,而对象的行为描述了对该对象的操作和功能。通过封装,属性和行为被组织在一个独立的单元(类)中,形成了一个完整的抽象实体,从而更好地模拟和描述现实世界的事物。

2.对属性和行为进行权限控制

封装还提供权限控制,也称为访问控制。通过使用访问修饰符(如private、protected、public),可以对对象的属性和行为进行权限控制。

  • private:私有权限,只有在类的内部才能访问和修改。私有属性和行为对于外部代码是不可见的,只能通过公共接口(公共成员函数)来间接访问和修改。
  • protected:受保护权限,可以在类的内部和派生类中访问和修改。受保护属性和行为对于外部代码也是不可见的,但可以在继承关系中被派生类访问。
  • public:公共权限,可以在类的内部和外部代码中访问和修改。公共属性和行为对于外部代码是可见的,并且可以直接访问和修改。

通过权限控制,我们可以限制对对象的访问范围,确保对象的数据封装性和安全性。私有属性只能通过公共接口进行访问,这样可以在接口中添加逻辑验证和约束。另外,通过限制访问权限,还可以隐藏对象的内部实现细节,提供更好的抽象接口给外部代码使用。

如何封装

在C++中,封装是通过定义类来实现的。

在设计类的时候,属性和行为写在一起,用于表现事物

封装语法

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

封装的基本步骤

定义类

使用class关键字定义一个类,并给它一个合适的名称。类应该代表一个概念、实体或对象,并具有相关的属性和行为。

声明成员变量

在类的内部声明需要封装的属性(成员变量)。这些成员变量可以是私有的(private)或受保护的(protected),以实现数据隐藏和访问控制。

声明成员函数

在类的内部声明需要封装的行为(成员函数)。这些成员函数用于访问和操作成员变量,以及提供对外的公共接口。(直接在内部写则无需声明)

实现成员函数

在类外部实现成员函数(类内部也可),即定义成员函数的具体功能和逻辑。可以根据需要访问和修改成员变量,实现对象的行为。

使用封装的类

在程序的其他地方实例化类对象,并通过公共接口访问和操作类的成员。外部代码只能通过公共接口来使用对象,无法直接访问私有成员。

通过以上步骤,我们可以将属性和行为封装在一个类中,并通过适当的访问修饰符控制对其的访问权限。这样可以实现数据的隐藏和保护,同时提供一致的公共接口供外部代码使用。

示例

class MyClass {
private:
    int myPrivateVariable;
protected:
    float myProtectedVariable;
public:
    void myPublicMethod();
};


void MyClass::myPublicMethod() {
    // 实现代码
}


int main() {
    MyClass obj;
    obj.myPublicMethod();   // 访问公共方法
    // obj.myPrivateVariable;  // 错误,无法访问私有成员
    return 0;
}

struct和class区别

默认成员访问权限

在结构体中,默认的成员访问权限是公有(public)(默认你写在public关键字下),也就是说结构体的成员变量和成员函数默认可以在任何地方被访问

在类中,默认的成员访问权限是私有(private)(默认你写在private关键字下),也就是说类的成员变量和成员函数默认只能在类内部访问,外部无法直接访问。

继承方式

在结构体中,默认的继承方式是公有继承(public inheritance),也就是说结构体可以通过继承来派生出子结构体,子结构体的成员的访问权限与父结构体相同

在类中,默认的继承方式是私有继承(private inheritance),也就是说类可以通过继承来派生出子类,但子类的成员的访问权限为私有,外部无法直接访问。

除了上述区别外,结构体和类在其他方面基本上是相同的。它们都可以具有成员变量、成员函数、构造函数、析构函数等,并且都可以使用访问修饰符来控制成员的访问权限。文章来源地址https://www.toymoban.com/news/detail-616518.html

到了这里,关于Day 13 C++ 封装的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 旅游网站day13

    1.1 首页banner查询接口 1.2 搜索服务 集成ES 为搜索模块搭建一个服务 为什么需要api? 因为搜索也需要模型对象。 导入es依赖: 搜索api: ES工具类封装 数据迁移: 把MySQL的数据迁移到ES中。 封装一个通用的操作ES的Service工具类。 ES数据初始化接口:(动态接口) 其余几种CASE下

    2024年01月23日
    浏览(60)
  • Java学习day13

    流是一个非常强大的概念,它提供了一种高效且便捷的方式来处理集合数据。你可以将流看作是一系列数据项的管道,你可以对这些数据进行各种操作,如过滤、映射、排序和归约。 流的创建 在Java中,你可以通过集合、数组或输入/输出操作来创建流。下面是一些创建流的示

    2024年02月19日
    浏览(24)
  • C语言假期作业 DAY 13

    A: 20 B: 21 C: 23 D 25 答案解析 正确答案:C 这个作用是对整型中0的个数进行统计,x=x|(x+1);的作用是每次循环把x的二进制中从右往左数的最后一位0变成1,直道变 成全1的时候x+1就溢出为全0,循环结束。2014的二进制是0000 0000 000 0000 0000 0111 1101 1110,所以结果是 23  A: int a , *x = a

    2024年02月13日
    浏览(32)
  • Day 47 动态规划 part13

    3道题目 300. 最长递增子序列 674. 最长连续递增序列 718. 最长重复子数组 dp[i]被设置为以nums[i]为结尾的最长递增子序列长度。 思路跟上题一致,甚至还更简单,因为只需要看前一个位置和当前位置的关系就好。 这道题相当于两道第一题重叠考虑,设置dp[i][j]为以i-1为结尾的

    2024年02月07日
    浏览(34)
  • 数模学习day13-典型相关分析

    典型相关分析(Canonical Correlation analysis)         研究两组变量(每组变量中都可能有多个指标)之间相关关系的一种多元统计方法。它能够揭示出两组变量之间的内在联系。 注:本文源于数学建模学习交流相关公众号观看学习视频后所作 目录 例子引入 解决思路 代表性

    2024年01月18日
    浏览(33)
  • 研磨设计模式day13组合模式

    目录 场景 不用模式实现  代码实现  有何问题  解决方案 代码改造  组合模式优缺点 思考  何时选用 场景 不用模式实现  代码实现  叶子对象 组合对象 Client 有何问题  必须区分组合对象和叶子对象,并进行有区别的对待 解决方案 组合模式 定义: 思路:将组合对象和叶

    2024年02月11日
    浏览(42)
  • #Day13 C基础(指针数组、函数)

    本质是数组,里面存放的是指针 1)用于存放普通变量的地址 2)用于存放二维数组的每一行第一个元素的地址(列地址) 3)用于存放字符串 char str[32] = “hello”; char *str = “hello”; printf(“%sn”, str); printf(“%p %pn”, str, str[0]); printf(“%c %cn”, *(str+1), str[1]); 使用指针数组存放字符

    2024年01月17日
    浏览(22)
  • Java-day13(枚举与注解)

    1.自定义枚举 如果枚举只有单个成员,则可以作为单例模式的实现方式 2.使用enum定义枚举类 enum是JDK1.5新增的 枚举类的主要方法 3.实现接口的枚举类 可以让枚举类的对象调用同一套被重写的抽象方法,执行的效果相同 例: 可以让不同的枚举类的对象调用被重写

    2024年02月11日
    浏览(30)
  • Wpf 使用 Prism 实战开发Day13

    在上一节  ToDoController 控制器,或 IToDoService 服务接口中,方法的传参都是直接传的实体类。但在实际开发过程中,这样是不允许的。标准且规范的做法是,定义一个数据传输层,即Dto层。 1. 创建 BaseDto 基类,用于存放共用属性。 2. 创建待办事项 Dto类,并继承自 BaseDto 基类

    2024年01月20日
    浏览(46)
  • day52 算法训练|动态规划part13

    参考:代码随想录 1. dp[i]的定义 本题中,正确定义dp数组的含义十分重要。 dp[i]表示i之前包括i的以nums[i]结尾的最长递增子序列的长度 为什么一定表示 “以nums[i]结尾的最长递增子序” ,因为我们在 做 递增比较的时候, 如果比较 nums[j] 和 nums[i] 的大小,那么两个递增子序列

    2024年01月15日
    浏览(41)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包