C++ 访问说明符详解:封装数据,控制访问,提升安全性

· 浏览次数 : 0

小编点评

**C++ 访问说明符访问说明符** 访问说明符是 C++ 中控制类成员(属性和方法)可访问性的关键字。它们用于封装类数据并保护其免受意外修改或滥用。 **三种访问说明符:** * **public:**允许从类外部的任何地方访问成员。 * **private:**仅允许在类内部访问成员。 * **protected:**允许在类内部及其派生类中访问成员。 **示例:** ```cpp class Person { public: string name; // 公共属性,可从外部访问private: int age; // 私有属性,仅在类内部可见protected: string address; // 受保护属性,可在类及其派生类中访问}; ``` **说明:** * 在 Person 类中,`name` 属性是公共的,这意味着可以在类外部创建对象并直接访问该属性:`Person p1;p1.name = \"Alice\";` * `age` 属性是私有的,只能在类内部的成员函数中访问:`Person p2;// p2.age = 30; // 错误:age 是私有的` * `address` 属性是受保护的,可以在类及其派生类中访问:`class Employee : public Person {public: void printAddress() { cout << address << endl; // 可以访问受保护属性 }};` **结论:** 使用访问说明符来封装类数据,使其免受意外修改或滥用。将属性默认设置为私有,并在需要时显式将其设置为 public 或 protected。仅在必要时使用 public 访问权限,并优先使用 private 或 protected 以提高安全性。

正文

C++ 访问说明符

访问说明符是 C++ 中控制类成员(属性和方法)可访问性的关键字。它们用于封装类数据并保护其免受意外修改或滥用。

三种访问说明符:

  • public:允许从类外部的任何地方访问成员。
  • private:仅允许在类内部访问成员。
  • protected:允许在类内部及其派生类中访问成员。

示例:

class Person {
public:
  string name; // 公共属性,可从外部访问

private:
  int age; // 私有属性,仅在类内部可见

protected:
  string address; // 受保护属性,可在类及其派生类中访问
};

解释:

  • Person 类中,name 属性是公共的,这意味着可以在类外部创建对象并直接访问该属性:
Person p1;
p1.name = "Alice";
  • age 属性是私有的,只能在类内部的成员函数中访问:
Person p2;
// p2.age = 30; // 错误:age 是私有的
  • address 属性是受保护的,可以在 Person 类及其派生类中访问:
class Employee : public Person {
public:
  void printAddress() {
    cout << address << endl; // 可以访问受保护属性
  }
};

总结:

  • 使用访问说明符来封装类数据,使其免受意外修改或滥用。
  • 将属性默认设置为私有,并在需要时显式将其设置为 public 或 protected。
  • 仅在必要时使用 public 访问权限,并优先使用 private 或 protected 以提高安全性。

附加说明:

  • 静态成员函数通常具有 public 访问权限,因为它们与类本身相关,而不是与特定对象相关。
  • 访问说明符仅控制访问权限,不能赋予修改权限。即使属性是 public 的,也需要确保您有权对其进行修改。

C++ 封装

封装是面向对象编程(OOP)的核心概念之一,它强调将数据隐藏在实现细节之后,只暴露必要的接口进行交互。在 C++ 中,封装可以通过访问说明符(public、private 和 protected)来实现,并结合使用 setter 和 getter 方法来控制对私有数据的访问。

封装的优点:

  • 数据安全性: 封装有助于保护数据免受意外修改或滥用,因为它限制了对私有成员的直接访问。
  • 代码维护性: 封装使代码更易于理解和维护,因为它隐藏了实现细节,只暴露必要的接口。
  • 代码可重用性: 封装的代码通常更易于重用,因为它可以独立于其他代码进行修改或扩展。

在 C++ 中实现封装:

  1. 使用访问说明符: 将类成员(属性和方法)声明为 private 以隐藏它们,或声明为 public 以允许外部访问。
  2. 使用 setter 和 getter 方法: 为私有属性创建公共的 getter 和 setter 方法,用于读取和设置属性值。

示例:

class Person {
private:
  string name;
  int age;

public:
  // Getter 方法
  string getName() {
    return name;
  }

  // Setter 方法
  void setName(string n) {
    name = n;
  }

  // Getter 方法
  int getAge() {
    return age;
  }

  // Setter 方法
  void setAge(int a) {
    age = a;
  }
};

int main() {
  Person p1;
  p1.setName("Alice");
  p1.setAge(30);

  cout << p1.getName() << " is " << p1.getAge() << " years old." << endl;
  return 0;
}

解释:

  • Person 类包含两个私有属性:nameage
  • 为了访问这些属性,提供了公共的 getter 和 setter 方法:getName(), setName(), getAge()setAge()
  • main() 函数中,我们创建了一个 Person 对象并使用 setter 方法设置其属性值。
  • 然后,我们使用 getter 方法获取属性值并输出它们。

总结:

封装是 C++ 中面向对象编程的重要基石。通过有效地封装类数据,您可以提高代码的安全性、维护性和可重用性。

最后

为了方便其他设备和平台的小伙伴观看往期文章:

微信公众号搜索:Let us Coding,关注后即可获取最新文章推送

看完如果觉得有帮助,欢迎点赞、收藏、关注

与C++ 访问说明符详解:封装数据,控制访问,提升安全性相似的内容:

C++ 访问说明符详解:封装数据,控制访问,提升安全性

C++ 访问说明符 访问说明符是 C++ 中控制类成员(属性和方法)可访问性的关键字。它们用于封装类数据并保护其免受意外修改或滥用。 三种访问说明符: public:允许从类外部的任何地方访问成员。 private:仅允许在类内部访问成员。 protected:允许在类内部及其派生类中访问成员。 示

谁说.net core不好动态访问webservice?看这篇文章,C#快速实现动态访问webservice,兼容.net framework和.net core+

前言:访问webservice,大多数人都是用服务引用的方式,但是这种方式比较麻烦,例如遇到服务更新了,你还需要手动更新你的服务引用,再重新发布,很麻烦。或者已有的一些例子,至少我看到的很多案例,动态访问也只能止步于使用.net framework环境,没看到有啥.net core上面动态访问的案例

CefSharp自定义缓存实现

大家好,我是沙漠尽头的狼。 上文介绍了《C#使用CefSharp内嵌网页-并给出C#与JS的交互示例》,本文介绍CefSharp的缓存实现,先来说说添加缓存的好处: 提高页面加载加速:CefSharp缓存可以缓存已经加载过的页面和资源,当用户再次访问相同的页面时,可以直接从缓存中加载,而不需要重新下

Lua热更学习--使用toLua中的协程

[6] C#访问调table类中的成员变量和函数 访问table中的变量和函数 lua中可以使用table作为class,因此对table中的函数访问调用是必要的根据前面对table访问和function的获取调用,这里尝试获取调用。 依然是如此,此种调用方式获取到的table中的函数是引用拷贝。

C# 多线程访问之 SemaphoreSlim(信号量)【进阶篇】

SemaphoreSlim 可对同时访问某一共享资源或资源池的线程数加以限制,相较于 Semaphore 更加轻量、快速,因此推荐使用,本文也着重介绍。

热更学习笔记10~11----lua调用C#中的List和Dictionary、拓展类中的方法

[10]Lua脚本调用C#中的List和Dictionary 调用还是在上文中使用的C#脚本中Student类: lua脚本: print(" 访问使用C#脚本中的List和Dictionary ") student.list:Add(2024) student.list:Add(5) studen

C# 使用SqlDataAdapter和DataSet来访问数据库

使用SqlDataAdapter和DataSet来访问数据库 报:已有打开的与此 Command 相关联的 DataReader,必须首先将它关闭 解决方法,使用 using 包住 connection using System; using System.Data; using System.Da

C程序函数调用&系统调用

理解程序的执行 我们要知道CPU可以自由地访问寄存器、内存。另外,程序是由操作系统执行的,所以操作系统能够控制程序的所有执行情况,限制程序的行为。 程序地执行过程: 程序是一个二进制文件,包含程序的代码指令、代码中的文本信息等(参考C语言的程序的各种段) 执行一个程序后,会将这个二进制加载到内存中,

[转帖]windows使用net user add用户并加入管理员,从而支持rdp远程登陆访问

C:\phpstudy_pro\WWW> net user test2 /add 命令成功完成。 C:\phpstudy_pro\WWW> net user test2 Huawei@123 命令成功完成。 C:\phpstudy_pro\WWW> net localgroup administra

C语言指针易混淆知识点总结

指针 定义 指针是一个变量,存储另一个变量的内存地址,它允许直接访问和操作内存中的数据,使得程序能够以更灵活和高效的方式处理数据和内存。 获取变量地址:使用取地址符 &。 访问地址上的数据:使用解引用符 *。 例子1 指针是存储另一个变量地址的变量。通过使用取地址符 & 和解引用符 *,我们可以灵活