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

本文涉及的产品
容器镜像服务 ACR,镜像仓库100个 不限时长
应用实时监控服务-用户体验监控,每月100OCU免费额度
Serverless 应用引擎免费试用套餐包,4320000 CU,有效期3个月
简介: C++ 中的访问说明符(public, private, protected)用于控制类成员的可访问性,实现封装,增强数据安全性。public 成员在任何地方都可访问,private 只能在类内部访问,protected 则允许在类及其派生类中访问。封装提供数据安全性、代码维护性和可重用性,通过 setter/getter 方法控制对私有数据的访问。关注公众号 `Let us Coding` 获取更多内容。

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,关注后即可获取最新文章推送

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

相关文章
|
1月前
|
存储 编译器 Linux
【c++】类和对象(上)(类的定义格式、访问限定符、类域、类的实例化、对象的内存大小、this指针)
本文介绍了C++中的类和对象,包括类的概念、定义格式、访问限定符、类域、对象的创建及内存大小、以及this指针。通过示例代码详细解释了类的定义、成员函数和成员变量的作用,以及如何使用访问限定符控制成员的访问权限。此外,还讨论了对象的内存分配规则和this指针的使用场景,帮助读者深入理解面向对象编程的核心概念。
94 4
|
4月前
|
存储 C++
【C++】C++ 基于QT实现散列表学生管理系统(源码+数据+课程论文)【独一无二】
【C++】C++ 基于QT实现散列表学生管理系统(源码+数据+课程论文)【独一无二】
106 1
【C++】C++ 基于QT实现散列表学生管理系统(源码+数据+课程论文)【独一无二】
|
3月前
|
数据安全/隐私保护 C语言 C++
C++(七)封装
本文档详细介绍了C++封装的概念及其应用。封装通过权限控制对外提供接口并隐藏内部数据,增强代码的安全性和可维护性。文档首先解释了`class`中的权限修饰符(`public`、`private`、`protected`)的作用,并通过示例展示了如何使用封装实现栈结构。接着介绍了构造器和析构器的使用方法,包括初始化列表的引入以及它们在内存管理和对象生命周期中的重要性。最后,通过分文件编程的方式展示了如何将类定义和实现分离,提高代码的模块化和复用性。
|
4月前
|
存储 算法 C++
C++ STL应用宝典:高效处理数据的艺术与实战技巧大揭秘!
【8月更文挑战第22天】C++ STL(标准模板库)是一组高效的数据结构与算法集合,极大提升编程效率与代码可读性。它包括容器、迭代器、算法等组件。例如,统计文本中单词频率可用`std::map`和`std::ifstream`实现;对数据排序及找极值则可通过`std::vector`结合`std::sort`、`std::min/max_element`完成;而快速查找字符串则适合使用`std::set`配合其内置的`find`方法。这些示例展示了STL的强大功能,有助于编写简洁高效的代码。
57 2
|
4月前
|
编译器 C++
virtual类的使用方法问题之C++类中的非静态数据成员是进行内存对齐的如何解决
virtual类的使用方法问题之C++类中的非静态数据成员是进行内存对齐的如何解决
|
3月前
|
JavaScript 前端开发 Java
通过Gtest访问C++静态、私有、保护变量和方法
通过Gtest访问C++静态、私有、保护变量和方法
99 0
|
4月前
|
存储 数据挖掘 C语言
【C/C++】C/C++车辆交通违章管理系统(源码+数据文件)【独一无二】
【C/C++】C/C++车辆交通违章管理系统(源码+数据文件)【独一无二】
|
4月前
|
存储 安全 数据处理
【C++】C++ 超市会员卡管理系统(面向对象)(源码+数据)【独一无二】
【C++】C++ 超市会员卡管理系统(面向对象)(源码+数据)【独一无二】
110 1
|
4月前
|
存储 算法 C++
【C/C++】C/C++ KTV点歌系统设计与实现(源码+数据+报告)【独一无二】
【C/C++】C/C++ KTV点歌系统设计与实现(源码+数据+报告)【独一无二】
|
27天前
|
存储 编译器 C语言
【c++丨STL】string类的使用
本文介绍了C++中`string`类的基本概念及其主要接口。`string`类在C++标准库中扮演着重要角色,它提供了比C语言中字符串处理函数更丰富、安全和便捷的功能。文章详细讲解了`string`类的构造函数、赋值运算符、容量管理接口、元素访问及遍历方法、字符串修改操作、字符串运算接口、常量成员和非成员函数等内容。通过实例演示了如何使用这些接口进行字符串的创建、修改、查找和比较等操作,帮助读者更好地理解和掌握`string`类的应用。
48 2