为什么我们不能制作class
变量public
?即使我们正在使用private
,我们也会将其用作public
变量,那么重点是什么?
此外,此代码中的错误是什么?
#include<iostream>
#include <string>
using namespace std;
class myClass{
public:
void setName(string x){
name = x;
}
string getName(){
return name;
}
private:
string name;
};
int main(){
myClass myObj;
myObj.setName = "D78iu98`";
cout << pubObj.getName<<endl;
}
答案 0 :(得分:2)
主要论点是封装,但你是对的。提供公共getter和setter(有效地将变量公开为public
)会破坏封装,并且仅比使用public
稍微好一些,因为它提供了单个访问点(即,您可以通过断点中断执行在getter / setter里面。)
对于您的问题 - setName
和getName
是方法,请使用它们。
答案 1 :(得分:0)
您的具体错误:myObj.setName = "name";
没有意义。您需要正确调用函数:myObj.setName("name");
是正确的调用语法。 (C ++确实提供了使您的特定语法有效的机制,但这些超出了本答案的范围。)
创建变量private
背后的想法是封装类中的数据。这有助于防止对象内部不一致。
也就是说,向单个成员提供get和set可以避免封装。如果这是特定实例所需的内容,那么请考虑创建成员public
。
我更喜欢在构造上设置尽可能多的成员数据,并在必要时提供get
方法。
继续,请考虑更改您的get
方法,以便将常量引用返回给数据成员:const string& getName()
。这可以防止获取字符串副本。
答案 2 :(得分:0)
#include<iostream>
使用namespace std;
class myClass { 上市: void setName(string x){ name = x; } string getName(){ 返回名称; } 私人的: 字符串名称; };
int main(){ myClass myObj; myObj.setName(&#34; D78iu98`&#34); COUT&LT;