我仍然是C 和OOP编程的新手,我只是想知道一些好奇的东西。我有一个班级,让我们用一些私人成员命名Foo
。我的问题是:Foo
对象在其寿命中不会将数据传递到其他对象。他们接收数据,做事并保存新数据以归档。这意味着,只有Foo
对象将访问Foo
私有成员。实施私人盖特斯和固定器是错误的吗?还是我应该使用直接访问?伪代码下面:
这还可以吗?
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;
}
不确定我是否以简单的方式解释了我的担忧。预先感谢您的答复和帮助。
编写 private
" getters"one_answers" setters"是毫无意义的,除非您以某种有趣的方式利用多态性。
通过A 构造函数设置您的会员变量是最好的选择,使成员const
可防止其无意修改。
避免使用"设置器",无论其可访问性如何,因为它们的执行范围都只不过是绕过封装。
我不是最有经验的C 开发人员,但是从我的角度来看,使用直接访问并不是一个不好的练习,它将需要更少的时间来写作。另一方面,界面中的此类成员清楚地表明,只有foo对象才能读取foo的私人成员,因此两种方式都是可以接受的。
拥有Getters和Setters的要点是以灵活且可扩展的方式控制对类成员的访问。如果您知道班级的外部客户永远不会使用它们,那么您将不会从创建Getters和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;
}