使类变量公开的问题

时间:2015-10-23 13:42:07

标签: c++

为什么我们不能制作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;
}

3 个答案:

答案 0 :(得分:2)

主要论点是封装,但你是对的。提供公共getter和setter(有效地将变量公开为public)会破坏封装,并且仅比使用public稍微好一些,因为它提供了单个访问点(即,您可以通过断点中断执行在getter / setter里面。)

对于您的问题 - setNamegetName是方法,请使用它们。

答案 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;