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

データのカプセル化またはデータの隠蔽はinterface、オブジェクトがそのデータの操作方法を制御するオブジェクトで を指定することによって実現されます。オブジェクトに値を渡す必要があります
call a method値が の場合、つまりオブジェクトが処理する範囲外の場合、オブジェクトは値の受け入れを拒否して例外をスローすることができます。

あなたがしているのは、オブジェクトでメソッドを呼び出すことです。直接変更して いませんprivate members。コンパイラはこれを禁止します。

C++-FAQこの特定のトピックについては、 を参照してください。

于 2013-03-25T11:30:27.640 に答える
0

はい、change_student() を呼び出して、外部から値を変更できます。しかし、外部関数はまだ変数に直接アクセスできませんよね? クラス 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 に答える