Ahli persendirian kelas hanya boleh diakses oleh ahli kelas. Ini dilakukan untuk mengekalkan prinsip enkapsulasi berorientasikan objek, memastikan data dan fungsi yang berkaitan disimpan dalam satu unit dan hanya boleh diakses daripada ahli kelas. C++ mempunyai tiga kawalan akses berbeza untuk menentukan keterlihatan ahli kelas. Tiga aksara kawalan akses ini ialah −
Public − Jika ahli kelas mempunyai keterlihatan awam, maka ahli ini boleh diakses dari mana-mana kelas lain.
Private − Ahli kelas dengan penglihatan peribadi hanya boleh diakses dari dalam kelas.
Dilindungi − ahli kelas yang dilindungi boleh diakses daripada with9dalam kelas atau daripada subkelasnya sahaja.
Untuk artikel ini, kami hanya akan menumpukan pada mengakses ahli persendirian kelas.
Fungsi Getter dan setter digunakan untuk mengakses dan mengubah suai ahli peribadi kelas. Seperti namanya, fungsi getter mengembalikan ahli data, manakala fungsi setter digunakan untuk "set" atau mengubah suai ahli data. Kami menggunakan dua contoh untuk lebih memahami konsep ini, tetapi sebelum itu, sintaks asas diberikan di bawah.
Getter/Fungsi pengakses −
private: <datatype> value; public: <datatype> getterFunction() { return <datatype> this->value; }
Fungsi penetap/Mutator−
private: <datatype> value; public: void setterFunction(<datatype> _value) { this->value = _value; }
#include <iostream> using namespace std; class Test{ private: int value; public: //the getter function int getValue() { return this->value; } //the setter function void setValue(int _value) { this->value = _value; } }; int main(){ Test test; test.setValue(15); cout << "The value we set is: " << test.getValue() << endl; return 0; }
The value we set is: 15
Situasinya sama apabila kita mengakses fungsi ahli persendirian. Kita perlu mengaksesnya dari dalam kaedah ahli kelas dengan cara yang sama seperti kita mengakses ahli data. Kita boleh menggunakan penunjuk "this" untuk mengelakkan konflik nama.
private: <returntype> function_name(params) {}; public: <returntype> another_function(params) { <datatype> var = this->function_name(arguments); }
Fungsi yang memanggil fungsi ahli persendirian harus diisytiharkan awam. Fungsi awam hanya akan dilaksanakan apabila dipanggil daripada objek kelas ini.
Terjemahan bahasa Cina bagi#include <iostream> using namespace std; class Test{ private: int value; //multiplies the member value by 10 void multiplyValue() { this->value = this->value * 10; } public: //the getvalue function calls the multiply value function int multiplyAndGetValue() { this->multiplyValue(); return this->value; } //the setter function void setValue(int _value) { this->value = _value; } }; int main(){ Test test; test.setValue(15); cout << "The value after setting and multiplying is: " << test.multiplyAndGetValue() << endl; return 0; }
The value after setting and multiplying is: 150
Dalam C++, kelas rakan ialah kelas yang boleh mengakses ahli peribadi dan dilindungi kelas lain yang tidak kelihatan kepada kelas lain. Untuk mengisytiharkan kelas sebagai rakan kelas lain, gunakan kata kunci ‘friend’. Mari lihat bagaimana ia berfungsi.
class A{ private: ..... friend class B; }; class B{ //class body };
#include <iostream> using namespace std; class Test1{ private: int value; public: Test1(int _value) { this->value = _value; } //we declare another class as a friend friend class Test2; }; class Test2{ public: //displays the value of the other class object void display(Test1 &t) { cout << "The value of Test1 object is: " << t.value; } }; int main(){ //creating two class objects of the two classes Test1 test1(15); Test2 test2; //calling the friend class function test2.display(test1); return 0; }
The value of Test1 object is: 15
Dalam C++, fungsi rakan adalah serupa dengan kelas rakan. Di sini, kita boleh mengisytiharkan fungsi tertentu yang bukan ahli kelas sebagai "rakan" dan ia akan mendapat akses kepada ahli peribadi kelas. Mari kita lihat sintaks cara mentakrifkan fungsi sebagai "友元".
class A{ private: ..... friend <return_type> function_name(params); }; <return_type> function_name(params) { //function body }
#include <iostream> using namespace std; class Test1{ private: int value; public: Test1(int _value) { this->value = _value; } //we declare a friend function friend void display(Test1); }; void display(Test1 t) { cout << "The value of Test1 object is: " << t.value; } int main(){ //creating two class objects of the two classes Test1 test1(55); //calling the friend class function display(test1); return 0; }
The value of Test1 object is: 55
Apabila kita mengakses ahli data peribadi kelas, sebaiknya gunakan fungsi accessor/getter dan modifier/setter. Ini adalah cara paling selamat untuk mengakses ahli data kelas. Satu perkara yang perlu sentiasa diingati ialah fungsi yang mengakses ahli persendirian harus diisytiharkan awam. Fungsi rakan tidak tersedia dalam bahasa berorientasikan objek lain kerana ini tidak selalu mengekalkan sifat enkapsulasi berorientasikan objek. Hubungan rakan adalah tidak simetri Jika kelas A mengisytiharkan kelas B sebagai rakan, maka kelas B akan mempunyai akses kepada semua ahli A, tetapi A tidak akan dapat mengakses semua ahli peribadi B.
Atas ialah kandungan terperinci Program C++ mengakses ahli peribadi kelas. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!