在 C++ 中访问类成员

28 Aug 2024 | 5 分钟阅读

C++ 是一种功能强大且灵活的编程语言,以其面向对象的特性而闻名。封装是面向对象编程 (OOP) 的核心概念之一,它使我们能够隐藏类的内部特性,并仅将必要的功能暴露给外部世界。为此,C++ 提供了许多访问修饰符来规范类成员的可见性,例如public、privateprotected。在本文中,我们将通过大量的示例和解释,研究这些访问修饰符并学习如何在 C++ 中访问类成员。

访问修饰符概述

访问修饰符控制类成员(变量函数)在类中的可见性和使用。C++ 中有三种主要的访问修饰符

公共

任何被指定为public成员,无论是类的内部还是外部,都可以访问。此修饰符提供了最广泛的可见性,允许从程序的任何区域访问成员。

私有

只有定义它们的类的成员才能访问私有成员。它们非常适合存储内部实现细节,因为它们对外部世界是隐藏的。

Protected

被指定为protected成员private 成员略有不同。它们可以从类及其派生类访问。如果我们希望仅为子类提供一定程度的访问权限,通常会使用 protected 成员。

访问公共类成员

让我们首先检查如何访问公共类的成员。我们可以在程序的任何地方访问公共成员

程序

让我们举一个例子来演示如何在 C++ 中访问公共类成员

输出

This is a public function.
Accessing publicVar from outside the class: 42

说明

在这个例子中,PublicVarpublicFunctionMyClass类的公共成员。我们在main 方法内部创建了一个名为objMyClass对象。publicVar成员可以直接从类外部访问、修改和调用,publicFunction成员也是如此。

我们可以看到公共成员可以随时随地被任何人访问。因此,它们应该用于必须从系统外部访问的接口元素。

访问私有类成员

只有定义它们的类的成员才能访问私有成员。如果我们尝试从类外部访问私有成员,将会出现编译错误

程序

让我们举一个例子来演示如何在 C++ 中访问私有类成员

输出

This is a private function.

说明

在上面的例子中,声明了 MyClass 类的私有成员 privateVarprivateFunction私有成员不能从类外部访问。因此,如果我们取消注释尝试直接访问 privateVar 的行,将导致编译错误

我们提供了公共成员函数 accessPrivateFunctionsetPrivateVar 来间接访问私有成员。在 C++ 中,强制执行封装和管理对敏感信息和实现细节的访问是常见的做法。

根据输出,私有函数 privateFunction 可以通过公共成员函数 accessPrivateFunction 访问。同样,我们使用公共成员方法 setPrivateVar 来设置 privateVar 的值。

访问受保护类的成员

私有成员和受保护成员都限制从类外部直接访问。然而,它们之间存在显著差异,即派生类(子类)可以访问受保护成员。

程序

让我们举一个例子来演示如何在 C++ 中访问受保护类成员

输出

Accessing protectedVar from a derived class: 42

说明

在这个例子中,ProtectedVar 被指定为 MyBaseClass受保护成员MyDerivedClass 是从 MyBaseClass 派生出来的类。我们在 main 中构造一个 MyDerivedClass 对象,并尝试直接访问 protectedVar。然而,这将导致编译问题。

相反,我们使用 MyBaseClass 的公共成员函数来访问 protectedVarprotectedVar 函数的值使用 setProtectedVar 函数设置,其值使用 getProtectedVar 函数检索。这些函数允许派生类 MyDerivedClass 访问 protectedVar,证明了 protected 访问修饰符的使用。

访问修饰符的正确使用

在回顾了 C++ 的三个访问修饰符之后,让我们讨论何时使用每个修饰符。

  • 对于应该在程序中任何地方都可以访问的类成员,请使用公共访问修饰符。类的这些组成部分指定了外部代码如何与其通信。
  • 对于类内部且不应从外部直接访问的成员,请使用私有访问修饰符。通常,私有成员用于实现细节和强制数据隐藏。
  • 如果我们希望为派生类提供受限访问,请使用受保护访问修饰符。它防止未经授权的代码直接访问受保护成员,同时仍允许派生类继承和使用它们。

结论

在 C++ 中创建可靠可维护的代码需要理解和掌握访问修饰符。我们可以通过遵循封装原则并使用public、privateprotected访问修饰符管理类成员的可见性来设计高效且安全的类。

总之,公共成员建立了类的接口,并且可以从任何地方访问。私有成员用于内部实现细节,并对公众隐藏。派生类可以访问受保护成员,为子类提供一种受限的获取信息机制。