C++ 中的 Getter 和 Setter
这个小指南将首先简要介绍面向对象编程中的封装和数据隐藏的概念。然后将继续使用 C++ 中的 getter 和 setter。
什么是封装
封装是将所有相关事物绑定在一起的概念。C++ 中的一个类可以将所有相关数据组合到一个胶囊中。
例如,假设我们有一个带有一些属性和属性的对象或实体 Rectangle
。我们可以将它的所有属性和属性组合在一个类中。
因此,众所周知,封装将相关数据和方法组合在一个类中。它经常与数据隐藏的概念相混淆。
数据隐藏是一个概念,属于一个类的属性不应该被类外的每个人访问。这是因为它违反了数据安全性。
如果将一个类的数据成员设为私有,则该类外的任何用户都无法访问它,因此我们可以实现数据安全。
通过这样做,虽然我们无法从类外部设置或获取数据成员的值,但我们可以创建可用于访问成员的方法,这些方法可以确保一些不需要的数据不会放在数据成员中.
这种设置或获取数据成员值的方法称为 getter
和 setter
。
C++ 中的 Getter 和 Setter
这是一个很好的编程实践,可以将类的数据成员设为私有,这样就不能将无效数据分配给类的数据成员。有了这个,你可以在将数据存储在数据成员中之前检查数据成员中的数据。
例如,我们有一个类 Shape
。任何形状的长度属性都不能为负数。
因此,在设置长度的值时,我们会检查提供的值是否大于零。
同样,如果我们有一个 Employee
类,它的属性是 salary
。该属性既没有负值也没有很大的正值。
因此,必须在设置 salary
的值之前放置一个验证器。让我们看看下面的例子。
class Emp{
private:
int empSalary;
public:
void setEmpSalary(int sal)
{
if (sal > 0 and sal < 10000000)
empSalary = sal;
}
int getEmpSalary()
{
return empSalary;
}
};
在这个代码片段中,我们有数据成员 salary
,它是私有的,用于实现数据隐藏。此外,我们为此数据成员提供了一个 getter 和 setter,以便在需要时可以设置和检索值。
在 setter 函数中,我们还创建了一个检查来控制在 salary
数据成员中输入的无效值。这是为你需要的任何数据成员创建 setter 和 getter 的方法。
让我们看一下上面示例的完整代码。
#include<iostream>
#include<string>
using namespace std;
class Emp{
private:
int empSalary;
string empName;
public:
Emp(string n, int s){
setEmpName(n);
setEmpSalary(s);
}
void setEmpName(string s){
empName = s;
}
string getEmpName(){
return empName;
}
void setEmpSalary(int sal){
if (sal > 0 and sal < 10000000)
empSalary = sal;
}
int getEmpSalary(){
return empSalary;
}
};
int main(){
Emp e ("John", 50000);
cout<<"Name: "<<e.getEmpName()<<endl;
cout<<"Salary: "<<e.getEmpSalary()<<endl;
}
输出:
Name: John
Salary: 50000
结论
向类接口添加 getter 和 setter 方法至关重要。因为类的成员变量将被声明为私有的,所以你的类的用户将需要一种方法来检索和设置他们的值。
因为 setter 方法可以包含数据验证代码以确保将成员变量设置为合法值,所以 getter 和 setter 函数可以安全地启用此访问。
当然,有时你不想为类的所有成员变量提供 getter、setter 或这两种方法。只读成员变量是可以获取但不能更改的变量。
一个这样的例子可以是一些静态数据成员,也可以是一些只读数据成员;对于这样的成员,我们需要一个 getter 函数,而不是一个 setter 函数。
相关文章
在 C++ 中通过掷骰子生成随机值
发布时间:2023/04/09 浏览次数:169 分类:C++
-
本文解释了如何使用时间因子方法和模拟 C++ 中的掷骰子的任意数方法生成随机数。了解它是如何工作的以及它包含哪些缺点。提供了一个 C++ 程序来演示伪数生成器。
在 C++ 中使用模板的链表
发布时间:2023/04/09 浏览次数:158 分类:C++
-
本文解释了使用模板在 C++ 中创建链表所涉及的各个步骤。工作程序演示了一个链表,该链表使用模板来避免在创建新变量时声明数据类型的需要。
在 C++ 中添加定时延迟
发布时间:2023/04/09 浏览次数:142 分类:C++
-
本教程将为你提供有关在 C++ 程序中添加定时延迟的简要指南。这可以使用 C++ 库为我们提供的一些函数以多种方式完成。
在 C++ 中创建查找表
发布时间:2023/04/09 浏览次数:155 分类:C++
-
本文重点介绍如何创建查找表及其在不同场景中的用途。提供了三个代码示例以使理解更容易,并附有代码片段以详细了解代码。
如何在 C++ 中把字符串转换为小写
发布时间:2023/04/09 浏览次数:63 分类:C++
-
介绍了如何将 C++ std::string 转换为小写的方法。当我们在考虑 C++ 中的字符串转换方法时,首先要问自己的是我的输入字符串有什么样的编码
如何在 C++ 中确定一个字符串是否是数字
发布时间:2023/04/09 浏览次数:163 分类:C++
-
本文介绍了如何检查给定的 C++ 字符串是否是数字。在我们深入研究之前,需要注意的是,以下方法只与单字节字符串和十进制整数兼容。
如何在 c++ 中查找字符串中的子字符串
发布时间:2023/04/09 浏览次数:65 分类:C++
-
本文介绍了在 C++ 中检查一个字符串是否包含子字符串的多种方法。使用 find 方法在 C++ 中查找字符串中的子字符串
如何在 C++ 中把字符串转换为 Char 数组
发布时间:2023/04/09 浏览次数:107 分类:C++
-
本文介绍了在 C++ 中把字符串转换为 char 数组的多种方法。使用 std::basic_string::c_str 方法将字符串转换为 char 数组