其他语言中的Getter和setter
Getter and setter in other languages
我是一个iphone程序员,知道getter和setter是如何工作的。(那个属性和合成)
但是我不熟悉其他语言,想知道如果我在c++这样的语言中创建一个变量,通过创建类的对象来访问它。
那么系统会自动为它创建getter和setter吗?
或者我需要做一些额外的工作?
c++没有提供这种功能,不幸的是,你必须手动编写getter和setter。
由于语言没有提供对这种事情的支持,因此您需要遵循一些经验法则来生成更高质量的代码:
-
所有成员变量都应该是非公共的。如果需要访问它们,则编写getter和/或setter。这使您可以轻松地修改该变量的访问方式,而不会有太多麻烦。
-
只有作为接口一部分的成员(即:需要是可见的)应该有getter/setter。不要一开始就为类中的每个成员写一个getter/setter对,并称之为封装,因为它不是。
-
如果你需要一个变量的setter或getter,这并不意味着你也需要另一个。原则上,只在需要时添加一些东西:添加新东西很容易,但一旦已经有了使用该特性的代码,就很难删除它们。
class Person
{
public:
const std::string& name() const {
return name_;
}
void name(const std::string& name) {
name_ = name;
}
private:
std::string name_;
};
int main()
{
Person pers;
pers.name("John");
std::cout << pers.name();
return 0;
}
很多人喜欢把这些函数命名为getName()
和setName()
,但我更喜欢这样。还要记住总是使你的getter为const
(例如。:在const std::string& name() const
) —这将向编译器发出信号,表明该函数不会修改Person
对象。
Edit:正如你所看到的,在c++中getter和setter就像任何其他方法一样,它们绝对没有什么特别的。
在c++中你需要做一些额外的工作。
但是是什么阻止了你去测试呢?
编辑:你必须声明和编码你自己的方法,就像经典的函数
c++中没有getter/setter的概念(与内置getter/setter的Objective-C相比)
你必须手动操作(但这通常是一个坏主意)。
- 如何为 C 型字符串数组编写 getter 和 setter?
- C++ Setter/Getter,cout 工作,printf 失败
- Getter 和 Setter 用于类 C++ 中的数组元素
- 如何编写C++getter和setter
- 如果构造函数和析构函数可以获取和显示(打印)数据,为什么我们需要 getter 和 setter?
- 有没有办法在没有括号的情况下在C++中调用成员的getter/setter?
- Getter and Setter for a View
- Boost python getter/setter with the same name
- 公共变量是否比使用 getter 和 setter 更快?
- 如何为数组成员变量声明 getter/setter
- 枚举器 C++ 的 setter 和 getter 方法
- 是否更正C++列表类重载"()"getter和setter的签名
- 生成的 getter 和 setter 代码格式
- 函数的 setter/Getter 在调用函数时将函数转换为字符串
- 这个C++setter/getter模式破坏了什么
- 通过引用返回或创建一个典型的setter/getter
- 强制类方法使用自己私有成员的setter/getter
- setter /getter和分层数据结构
- 为3D数组定义setter/getter属性
- c++类中成员setter /getter的适当设计