【C++漂流记】一文搞懂类与对象的封装

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

本篇文章主要说明了类与对象中封装的有关知识,包括属性和行为作为整体、访问权限、class与struct的区别、成员属性的私有化,希望这篇文章可以帮助你更好的了解类与对象这方面的知识。
【C++漂流记】一文搞懂类与对象的封装,C++漂流记,c++,前端,开发语言



一、属性和行为作为整体

封装是面向对象编程中的一种特性,它将数据和操作数据的方法组合在一起,形成一个类。封装的目的是将数据和方法进行包装,使其成为一个独立的实体,外部只能通过类提供的接口来访问和操作数据,而不需要了解内部的实现细节。

示例:

class Circle {
private:
    double radius;

public:
    void setRadius(double r) {
        radius = r;
    }

    double getRadius() {
        return radius;
    }

    double getArea() {
        return 3.14 * radius * radius;
    }
};

在上面的示例中,我们定义了一个名为Circle的类,它具有一个私有的属性radius和三个公有的方法setRadiusgetRadiusgetArea

  • 属性:属性是类中的变量,用于存储对象的状态。在示例中,radiusCircle类的私有属性,只能通过类的方法来进行访问和修改。

  • 行为:行为是类中的方法,用于操作对象的状态。在示例中,setRadius方法用于设置radius的值,getRadius方法用于获取radius的值,getArea方法用于计算圆的面积。

通过封装,我们将属性和行为组合在一起,形成了一个完整的圆对象。外部代码只能通过类的公有方法来访问和操作圆的属性,而不需要知道属性的具体实现细节。这样可以提高代码的可维护性和安全性,同时也方便了代码的重用。


二、访问权限

同样以上面为示例

在示例中,属性radius被声明为私有(private)。私有属性只能在类的内部访问,外部代码无法直接访问或修改私有属性的值。这是通过使用访问修饰符(private, public, protected)来实现的。

私有属性和方法只能在类的内部使用,对外部是不可见的。这种封装的好处是可以隐藏类的内部实现细节,提高代码的安全性和可维护性。

示例解释:

在示例中,radius属性被声明为私有,这意味着外部代码无法直接访问radius属性。为了访问和修改radius的值,我们提供了公有的setRadiusgetRadius方法。通过setRadius方法,外部代码可以传递一个新的半径值来修改radius的值;通过getRadius方法,外部代码可以获取radius的当前值。

Circle circle;
circle.setRadius(5.0); // 通过公有方法setRadius设置radius的值为5.0
double radius = circle.getRadius(); // 通过公有方法getRadius获取radius的值

在上面的示例中,外部代码无法直接访问circle对象的radius属性,而是通过公有方法setRadiusgetRadius来间接访问和修改radius的值。这样可以确保radius属性的访问和修改是受控的,同时隐藏了radius属性的具体实现细节。


三种访问权限修饰符

在C++中,有三种访问权限修饰符:privateprotectedpublic。这些修饰符用于控制类的成员(属性和方法)对外部的可见性和可访问性。

  1. private(私有):私有成员只能在类的内部访问,外部代码无法直接访问或修改私有成员的值。私有成员的目的是隐藏类的内部实现细节,提高代码的安全性和封装性。

  2. protected(保护):保护成员在类的内部和派生类中可访问,但对外部是不可见的。保护成员的目的是在继承关系中提供一定的访问权限,使派生类能够继承和访问基类的成员。

  3. public(公有):公有成员可以在类的内部和外部访问。公有成员没有访问限制,可以被任何代码访问和修改。

这些访问权限修饰符可以应用于类的成员(属性和方法)的声明。默认情况下,类的成员是私有的。


三、class与struct的区别

在C++中,classstruct是用于定义自定义数据类型的关键字。它们之间的主要区别在于默认的成员访问权限和默认的继承权限。

  1. 成员访问权限:
  • class:默认的成员访问权限是私有(private)
  • struct:默认的成员访问权限是公有(public)

这意味着在class中声明的成员(属性和方法)默认是私有的,只能在类的内部访问。而在struct中声明的成员默认是公有的,可以在类的内部和外部访问。

示例:

class MyClass {
    int x;  // 默认为私有(private)
    void foo();  // 默认为私有(private)
};

struct MyStruct {
    int x;  // 默认为公有(public)
    void foo();  // 默认为公有(public)
};
  1. 继承权限:
  • class:默认的继承权限是私有继承(private inheritance)
  • struct:默认的继承权限是公有继承(public inheritance)

这意味着在class中继承的成员默认是私有继承的,派生类只能访问基类的公有和保护成员。而在struct中继承的成员默认是公有继承的,派生类可以访问基类的公有、保护和私有成员。

继承部分会在下一篇文章详细的说明,可以前往我主页订阅专栏,每天一个C++知识点

示例:

class BaseClass {
    // ...
};

class DerivedClass : BaseClass {
    // 默认为私有继承(private inheritance)
};

struct BaseStruct {
    // ...
};

struct DerivedStruct : BaseStruct {
    // 默认为公有继承(public inheritance)
};

除了上述区别之外,classstruct在语法上没有其他差异,它们可以具有相同的成员、方法和功能。选择使用class还是struct取决于个人偏好和代码的语义。一般来说,如果定义的是一个拥有私有成员和实现细节的复杂数据类型,通常会使用class;如果定义的是一个简单的数据容器或数据结构,通常会使用struct


四、成员属性私有化

将类的成员属性私有化是一种常见的编程实践,它可以提供更好的封装性和数据安全性。私有成员属性只能在类的内部访问,外部代码无法直接访问或修改私有属性的值。这样可以隐藏类的内部实现细节,防止外部代码对属性的误操作或非法访问。

在C++中,可以使用访问权限修饰符来设置成员属性的访问权限。通过将属性声明为私有(private),可以将其限制为只能在类的内部访问。私有属性通常通过公有的成员函数(例如getterssetters)来间接访问和修改。

示例代码:

class MyClass {
private:
    int privateAttribute;  // 私有属性

public:
    // 公有成员函数用于访问和修改私有属性
    int getPrivateAttribute() {
        return privateAttribute;
    }

    void setPrivateAttribute(int value) {
        privateAttribute = value;
    }
};

在上述示例中,privateAttribute被声明为私有属性,外部代码无法直接访问。通过公有的getPrivateAttribute()setPrivateAttribute()函数,可以间接地访问和修改私有属性的值。

私有化成员属性的好处包括:文章来源地址https://www.toymoban.com/news/detail-706052.html

  • 隐藏类的内部实现细节,提高代码的封装性和安全性。
  • 通过公有的成员函数来控制对私有属性的访问和修改,可以进行数据验证和处理。
  • 允许在不改变类的接口的情况下,修改属性的实现细节。

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

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

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

相关文章

  • C++初阶学习第三弹——类与对象(上)——初始类与对象

    C++初阶学习第三弹——类与对象(上)——初始类与对象

    前言: 在前面,我们已经初步学习了C++的一些基本语法,比如内敛函数、函数重载、缺省参数、引用等等,接下来我们就将正式步入C++的神圣殿堂,首先,先给你找个对象 目录 一、类与对象是什么? 二、类的各部分组成 1、类的定义 2、类的访问限定符及封装 3、类的作用域

    2024年04月26日
    浏览(12)
  • [C++] 类与对象(上)

    [C++] 类与对象(上)

      目录 1、前言 2、类的引入 3、类的定义 3.1 类的两种定义方式 4、类的访问限定符 5、类的作用域 6、类的实例化 7、类对象模型 7.1 内存对齐规则 7.1 类对象的存储方式 8、this指针 8.1 this指针的特性 8.2 this指针是否可以为空 C语言是 面向过程 的, 关注 的是 过程 ,分析出求解

    2024年02月15日
    浏览(8)
  • C++ 类与对象(下)

    C++ 类与对象(下)

    目录 1. 再谈构造函数 1.1 构造函数体赋值  1.2 初始化列表  1.3 explicit  2. static成员 2.1 概念 2.2 特性  3.友元 3.1友元函数   3.2 友元类 4. 内部类 5.匿名对象  6.拷贝对象时的一些编译器优化  7. 再次理解类和对象 1. 再谈构造函数 2. Static成员 3. 友元 4. 内部类 5.匿名对象

    2024年02月19日
    浏览(7)
  • C++ 类与对象(上)

    C++ 类与对象(上)

    目录 本节目标  1.面向过程和面向对象初步认识  2.类的引入  3.类的定义 4.类的访问限定符及封装 4.1 访问限定符 4.2 封装 5. 类的作用域 6. 类的实例化  7.类对象模型 7.1 如何计算类对象的大小 7.2 类对象的存储方式猜测 7.3 结构体内存对齐规则  8.this指针 8.1 this指针的引出

    2024年02月19日
    浏览(5)
  • 【C++】类与对象(中)

    【C++】类与对象(中)

    目录 1. 类的6个默认成员函数 2. 构造函数 2.1 概念 2.2 特性 3. 析构函数 3.1 概念 3.2 特性 4. 拷贝构造函数 4.1 概念 4.2 特征 5. 赋值运算符重载 5.1 运算符重载 5.2 赋值运算符重载 5.3 前置++和后置++重载 6. const成员 7. 取地址及const取地址操作符重载 如果一个类中什么成员都没有,

    2024年02月05日
    浏览(7)
  • 【C++】类与对象(下)

    【C++】类与对象(下)

      若想了解什么是类、封装的意义可以移步  【C++】类与对象(引入)   若对六大成员函数或const成员函数有疑问的这篇文章可能可以帮到你  【C++】类与对象(上) 目录 系列文章 前言 1.初始化列表 1.1概念 1.2特性  1.2.1必须使用初始化列表的情况 1.2.2初始化的顺序 2.expli

    2023年04月14日
    浏览(10)
  • c++类与对象

    c++类与对象

    🐶博主主页: @ᰔᩚ. 一怀明月ꦿ  ❤️‍🔥 专栏系列: 线性代数,C初学者入门训练,题解C,C的使用文章 🔥 座右铭: “不要等到什么都没有了,才下定决心去做” 🚀🚀🚀大家觉不错的话,就恳求大家点点关注,点点小爱心,指点指点🚀🚀🚀  目录 🐰类与对象 🌸

    2023年04月08日
    浏览(9)
  • C++类与对象(下)

    您好这里是limou3434的博文,感兴趣可以看看我的其他博文系列。 这一部分是对C++类的一些补充:初始化列表、友元、内部类。 在给对象进行初始化的时候,如果选择函数体内进行初始化是一件很麻烦的事情。 但是这样写是没有办法过的,要成功运行的话只能写一个默认构造

    2024年02月11日
    浏览(10)
  • 【C++】类与对象(上)

    【C++】类与对象(上)

    之前的文章中讲解了,什么是类、类的实例化,以及封装的意义,若仍有不理解的部分可以移步上一篇文章  【C++】类与对象(引入) 目录 系列文章 1.默认成员函数 2.构造函数 2.1定义 2.2特性 2.2.1重载构造函数 2.2.2与缺省参数混合使用 2.2.3默认构造函数 3.析构函数 3.1定义

    2023年04月15日
    浏览(13)
  • C++类与对象(下)

    C++类与对象(下)

    创建对象时,编译器会调用构造函数给对象中的成员变量一个合适的初始值。 虽然上述构造函数调用时,每个成员变量都有一个初始值了,但是这并不能称为类对象成员的初始化, 构造函数体中的语句只能称为赋初值 ,而不能称为初始化,因为 初始化只能初始一次,而构造

    2024年02月11日
    浏览(9)

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

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

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

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

二维码1

领取红包

二维码2

领红包