0
 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();
}

类中数据隐藏和抽象的基本含义是什么?即使我们实际上可以访问类的私有成员。

4

3 回答 3

1

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

我认为您误解了隐藏或封装的含义。这是为了防止意外修改私有成员 - 你只能通过使用公共函数来做到这一点。它不是该成员完全不可访问。它也不是一种保护秘密的方法。

于 2013-03-25T11:30:38.283 回答
0

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

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

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

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

于 2013-03-25T11:31:27.200 回答
0

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

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

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

于 2013-03-25T11:30:27.640 回答