数据实际上是如何隐藏在类中的

How is data actually hidden in a class?

本文关键字:隐藏 实际上 何隐藏 数据      更新时间:2023-10-16
 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() 中看到或更改roolnoname时,它们是如何隐藏类的成员的

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++;
     }

封装和数据隐藏可以确保外部类不必处理类的内部工作。这些事情将由你的班级自己处理。