c++ - 访问者与公共(public)成员

标签 c++ class member

我有一个类,其中包含许多具有读/写访问权限的内置类型成员。我应该让他们成为公共(public)成员并为每个成员提供获取/设置方法吗?结构如何?

最佳答案

拥有访问器( getter )和修饰器( setter )的全部原因是为您提供额外的间接级别。

这种额外的间接级别允许您向公共(public)接口(interface)提供变量的只读 View ,同时不允许更改数据成员。您仍然可以使用私有(private)或 protected setter。

setter 允许您在设置值时进行特殊的错误检查、验证和更正。例如 setDirectory(const std::string &strPath),如果用户没有指定,您可以确保有一个终止斜杠。这可确保您的类状态始终有效。

Getter 还可以保护您的成员不让他们暴露以允许指向他们的指针。通过不允许从外部指向它们的指针,您可以确保如果您的对象超出范围,它不会导致崩溃。

getter/setter 的额外间接级别还允许您更改它们封装的数据成员。

使用 getter 还可以获得数据的不同 View ,例如:getMinutes,当您的数据成员实际存储时以秒为单位。

这不是使用它们的原因,但使用 getter 和 setter 的一个很好的副作用是您可以在修饰符内设置一个断点,例如以准确查看它何时更改。

是否应该使用它们取决于您的需要。如果你有太多的成员以至于提供 getter 和设置是一件非常痛苦的事情,你可以考虑将数据成员存储在一个结构中,然后在你的类中使用该结构。您甚至可以一次性为整个结构的对象提供 getter/setter。

关于c++ - 访问者与公共(public)成员,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/670958/

相关文章:

javascript - 封装的闭包与类?

c++ - 在初始化列表中使用静态类成员作为参数

c++ - "Cannot convert"成员函数指针问题

c++ - 异常规范或多或少的限制

c++ - sf::Drawable 和 sf::Transformable 包含 Sprite 、文本和形状的数组

c++ - Boost Graph Library 无法存储对其他顶点的引用?

c++ - 为什么这个右值调用不明确?

Python 如何在类定义中初始化 Reader 对象

c# - 在 C# 中创建将被重用的对象的最佳方法是什么

c++ - 检索和编辑 vector 中对象的私有(private)成员