iis服务器助手广告广告
返回顶部
首页 > 资讯 > 后端开发 > 其他教程 >【C++漂流记】一文搞懂类与对象的封装
  • 265
分享到

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

c++前端开发语言 2023-09-17 20:09:41 265人浏览 独家记忆
摘要

本篇文章主要说明了类与对象中封装的有关知识,包括属性和行为作为整体、访问权限、class与struct的区别、成员属性的私有化,希望这篇文章可以帮助你更好的了解类与对象这方面的知识。

本篇文章主要说明了类与对象中封装的有关知识,包括属性和行为作为整体、访问权限、class与struct的区别、成员属性的私有化,希望这篇文章可以帮助你更好的了解类与对象这方面的知识。
在这里插入图片描述


文章目录


一、属性和行为作为整体

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

示例:

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.0double 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://blog.csdn.net/Goforyouqp/article/details/132774506

--结束END--

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

本文链接: https://www.lsjlt.com/news/411329.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作