数据如何实际隐藏在一个类中?

时间:2013-03-25 11:26:06

标签: c++ oop

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

现在,请说明当我们可以从任何外部函数示例roolno

中查看或更改它们时,namemain()隐藏的成员是怎样的
int main()
{
  student s1;
  s1.change_stud();
  s1.show_student();
}

课堂上数据隐藏和抽象的基本含义是什么?即使我们实际上可以访问班级的私人成员。

3 个答案:

答案 0 :(得分:1)

请检查一下 - http://www.parashift.com/c++-faq/encap-is-for-code-not-people.html

我认为你误解了隐藏或封装意味着什么。 这意味着要防止意外修改私有成员 - 您只能通过使用公共功能来实现。它不是完全无法访问的成员。它也不是保护秘密的一种方式。

答案 1 :(得分:0)

数据封装或数据隐藏是通过在对象上指定interface来实现的,对象控制对象的操作方式。
call a method在一个对象上传递一个值。如果值是,即超出对象处理的范围,对象可以拒绝接受该值并抛出异常。

您正在做的是在对象上调用方法,更改 直接private members,编译器会禁止这个。

请参阅有关此特定主题的C++-FAQ

答案 2 :(得分:0)

是的,您可以调用change_student()来更改外部的值。但是外部函数仍然无法直接访问变量,对吧?您的班级学生仍然管理变量。如果外部类使用非法参数调用函数,则Student类仍然可以拦截这些函数调用,并确保其状态保持逻辑。

数据隐藏还意味着您无需知道变量的确切名称或更改时需要采取的任何额外步骤。例如,假设您有另一个变量,该变量取决于学生更改的次数。

void change_student()
     { cout<<"enter new roll no:";
       cin>>rollno;
       cout<<" new name ";
       cin.getline(name,20);
        numberOfTimesChanged++;
     }

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