数据实际上是如何隐藏在类中的
How is data actually hidden in a class?
class student
{
private :
int rollno;
char name[20];
public:
void change_stud()
{ cout<<"enter new roll no:";
cin>>rollno;
cout<<" new name ";
cin.getline(name,20);
}
void show_student()
{ cout<<rollno<<" "<<name;}
}
现在,请解释当我们可以从任何外部函数示例main()
中看到或更改roolno
和name
时,它们是如何隐藏类的成员的
int main()
{
student s1;
s1.change_stud();
s1.show_student();
}
类中数据隐藏和抽象的基本含义是什么?即使我们实际上可以访问类的私人成员。
请检查此项-http://www.parashift.com/c++-faq/encap-is-for-code-not-people.html
我认为你误解了隐藏或封装的含义。这是为了防止意外修改私人成员——你只能通过使用公共函数来完成。事实并非如此,该成员完全无法访问。这也不是一种保护秘密的方式。
数据封装或数据隐藏是通过在对象上指定interface
来实现的,对象控制其数据的操作方式
您在对象上call a method
以将值传递给它。如果值为,即超出了对象要处理的范围,则对象可以拒绝接受该值并引发异常。
您正在做的是在对象上调用方法,而不是更改如果直接使用private members
,编译器将禁止此操作。
请参阅有关此特定主题的C++-FAQ
。
是的,您可以调用change_student((从外部更改值。但是外部函数仍然不能直接访问变量,对吧?学生仍然管理变量。如果外部类使用非法参数调用函数,Student类仍然可以拦截这些函数调用,并确保其状态保持逻辑。
数据隐藏还意味着你不需要知道变量的确切名称,也不需要知道在更改变量时需要采取的任何额外步骤。例如,假设你有另一个变量,这取决于学生更改的次数。
void change_student()
{ cout<<"enter new roll no:";
cin>>rollno;
cout<<" new name ";
cin.getline(name,20);
numberOfTimesChanged++;
}
封装和数据隐藏可以确保外部类不必处理类的内部工作。这些事情将由你的班级自己处理。
相关文章:
- 如何确认我的constexpr表达式实际上已经在编译时执行
- 这是我尝试让用户将值输入到数组中.然后将其隐藏为大量的星号
- 为什么我的删除节点函数实际上没有删除节点?
- 结构和双指针隐藏在其他结构中,多层混淆
- 其中降频广播实际上是有用的
- 在 cpp 文件中隐藏采用模板参数引用的方法
- "delete"在 C++ 中实际上做了什么?
- 参数包构造函数在类模板中隐藏用户定义的转换
- 如何等待窗口隐藏在Qt中?
- 如何使用类型别名从模板化类中隐藏模板列表
- 在设计 SDK 时,我是否应该在 C++ 头文件中完全隐藏内部类?
- C++:实际上不是从二进制文件中读取
- 在这里,当我们比较 if(vc[i]==vc1[i]) 时,它是向量数组. 实际上比较的值是多少,
- 名称隐藏对静态函数继承的实例使用
- 在 Linux 中使用 ioctl() 获取隐藏功能报告时,零字节消失
- 从多个模板化基类派生时出现"隐藏重载的虚函数"警告
- 如何在 Omnet++ 5.6.1 中隐藏箭头?
- 您好,我实际上想了解以下代码.有人可以详细说明代码它到底在做什么吗?为什么它会在第 31 行崩溃
- 为什么我们实际上需要运行时多态性?
- 数据实际上是如何隐藏在类中的