我还是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;
}
不确定我是否以简单的方式解释了我的疑虑。 提前感谢您的回复和帮助。
答案 0 :(得分:4)
写private
&#34; getters&#34;和#34; setters&#34;没有意义,除非你以某种有趣的方式利用多态性。
通过构造函数设置成员变量是最好的办法,让成员const
可以防止他们无意中进行修改。
避免&#34;制定者&#34;只要有可能,无论它们是否可访问,因为它们只是绕过封装。
答案 1 :(得分:2)
我不是最有经验的C ++开发人员,但从我的角度来看,使用直接访问并不是一种糟糕的做法,而且编写时间也更短。 另一方面,在你的界面中有这样的成员清楚地表明只有Foo对象可以读取Foo的私人成员,所以两种方式都可以接受。
答案 2 :(得分:2)
拥有getter和setter的要点是以灵活和可扩展的方式控制对类成员的访问。如果你知道它们永远不会被类的外部客户端使用,你就不会从创建getter和setter中得到任何东西,所以我建议不要写它们。
它们只会混乱您的源文件,使您的代码更难阅读。
按照他们的方式,您每次要访问成员时都不需要使用this
:
class foo {
private:
string a;
string b;
string c;
public:
//many omitted methods//
void Method();
}
void foo::method() {
string s1;
a=s1;
std::cout<<"A equals: "<< a;
}