将类变量设为公共的问题

problems with making class variable public

本文关键字:问题 类变量      更新时间:2023-10-16

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

主要参数是封装,但是您是对的。提供公共getter和setter(有效地将变量暴露为public)会破坏封装,并且只比public稍微好一点,因为它提供了一个单一的访问点(即您可以通过getter/setter内部的断点中断执行)。

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

您的特定错误:myObj.setName = "name";没有意义。您需要正确调用函数:myObj.setName("name");是正确的调用语法。(c++确实提供了使您的特定语法有效的机制,但这些超出了本回答的范围。)

创建变量private背后的想法是将封装在类中的数据。这可以帮助防止对象内部不一致。

也就是说,在单个成员中提供get和set可以避免封装。如果在特定实例中需要这样做,则考虑将成员设置为public

我倾向于在构造上设置尽可能多的成员数据,并在必要时提供get方法。

继续,考虑更改get方法,将常量引用返回给数据成员:const string& getName()。这可以防止获取字符串副本。
#include<iostream>
<标题>包括

myClass类{公众:无效setName(字符串x){Name = x;}字符串getName () {返回名称;}私人:字符串名称;

};

int main () {myClass myObj;myObj.setName("D78iu98");cout<</div>