将类变量设为公共的问题
problems with making class variable public
为什么我们不能让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内部的断点中断执行)。
对于您的问题- setName
和getName
是方法,使用它们。
您的特定错误: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>
标题>相关文章:
- 查找后更改类变量
- 如何避免在仅标头库中C++类/变量重定义
- c++ 在非类函数中使用类变量
- 基于模板的类变量
- 分段 访问私有类变量时出错
- 为什么从另一个构造函数内部调用C++构造函数不修改类变量?
- 如何访问基类向量中的子类变量?(对于实体组件系统)
- 模板类变量作为非模板类的成员
- (2 问题)"类"类型重新定义(即使 #pragma 一次),以及静态函数内的静态成员对象初始化?
- C++11 - 获取编译时的所有类变量,并在没有 Boost 的情况下为它们调用方法
- 如何在构造函数中访问类变量以分配它们,而无需在C++中使用此指针
- 类变量无法从类方法访问
- 指针作为类变量 Qt
- 为什么线程对类变量所做的更改没有影响?
- memcpy() 在一个类中被调用以复制到另一个类变量中后会引发异常
- C++:使用基类中的仅派生类变量
- cin和设置类变量的问题
- 使用JNI时出现实例和类变量状态问题
- 将类变量设为公共的问题
- 访问类变量时出现问题