【发布时间】:2018-02-20 12:52:27
【问题描述】:
我还是 C++ 和 OOP 编程的新手,我只是想知道一些奇怪的事情。
我有一个班级,我们将其命名为Foo,其中有一些私人成员。
我的问题是:Foo 对象在其生命周期内不会“传递数据”给其他对象。他们接收数据,做事,并将新数据保存到文件中。这意味着,只有Foo 对象可以访问Foo 私有成员。
实现私有 getter 和 setter 有错吗?
还是我应该使用直接访问?
伪代码如下:
这样好吗?
class foo
{
private:
string a;
string b;
string c;
void setA(string A){this->a=A;}
string getA()const{return this->a;
void setB(string B){this->b=B;}
string getB()const{return this->b;
void setC(string C){this->c=C;}
string getC()const{return this->b;
public:
//many omitted methods//
void Method(); //<-- this method does things and calls private getters and setters to modify private members
}
主要内容:
{
Foo obj=....;
obj.Method();
}
或者我应该:
class foo
{
private:
string a;
string b;
string c;
public:
//many omitted methods//
void Method();
}
void foo::method()
{
string s1;
//initialize s1;
this->a=s1; //operation example
std::cout<<"A equals: "<< this->a;
}
不确定我是否以简单的方式解释了我的担忧。 提前感谢您的回复和帮助。
【问题讨论】:
-
在某些时候,您必须编写访问成员本身的代码。我看不出推迟它的意义。我个人尽量避免使用 public getter 和 setter,因为它们会破坏封装。
-
这更多的是见仁见智,因此并不适合这种格式。这是一篇讨论您的问题的好文章:quora.com/…
-
我正在考虑实现直接访问:如果我说声明那些 getter 和 setter
inline将产生与直接访问相同的结果,我错了吗? -
我使用了私有的 setter/getter,但仅在非常有限的情况下更改值也需要发送值更改的事件。 setter 处理了这个额外的行为。否则,对于 C++,没有必要将成员变量视为某种 Java Bean 类型的值,更不用说私有 getter/setter。
-
@GiulioPaoli 这真的取决于编译器会发生什么。 inline 只会迫使编译器更积极地进行内联(通常它会取消最大函数体字节限制)
标签: c++ oop design-patterns software-design