Fungsi ahli ialah fungsi yang ditakrifkan dalam konteks kelas dan dikaitkan dengan objek, dan boleh mengakses data dan kaedah objek. Untuk menjadikannya serasi dengan bekas, kelas tersuai mesti menyediakan pengendali tugasan, pengendali kesamarataan dan ketidaksamaan serta pengendali perbandingan. Selain itu, untuk menyokong iterator, kelas harus menyediakan fungsi begin() dan end() yang mengembalikan iterator kepada elemen permulaan dan penamat bekas, serta pengendali yang menyahrujuk dan menambah iterator.
C++ Fungsi Ahli Diterangkan: Keserasian Bekas dan Sokongan Iterator untuk Kaedah Objek
Dalam C++, fungsi ahli ialah jenis fungsi khas yang ditakrifkan dalam konteks kelas. Tidak seperti fungsi biasa, fungsi ahli dikaitkan dengan objek, yang bermaksud mereka mempunyai akses kepada ahli dan kaedah data objek tersebut.
Keserasian Bekas
Pustaka standard C++ mengandungi banyak kelas kontena, seperti vektor
, list
dan map
. Bekas ini boleh menyimpan pelbagai jenis data, termasuk objek kelas tersuai. Agar objek kelas tersuai serasi dengan bekas, kelas mesti menyediakan fungsi ahli tertentu: vector
、list
和 map
。这些容器可以存储不同类型的数据,包括自定义类对象。为了使自定义类对象与容器兼容,类必须提供特定的成员函数:
operator=
:赋值运算符,用于将一个对象赋值给另一个对象。operator==
和 operator!=
: 相等和不相等运算符,用于比较两个对象。operator<
等比较运算符,用于根据特定顺序比较两个对象。迭代器支持
迭代器是用于遍历容器的特殊对象。为了使自定义类对象支持迭代器,类必须提供以下成员函数:
begin()
:返回指向容器第一个元素的迭代器。end()
:返回指向容器最后一个元素的迭代器(或超出容器最后一个元素的迭代器)。operator++
:前缀或后缀递增运算符,用于将迭代器移动到下一个元素。operator*
:解引用运算符,用于获取迭代器指向元素的值。实战案例
考虑以下表示日期的 Date
类:
class Date { public: Date(int year, int month, int day) : year(year), month(month), day(day) {} // ... 其他成员函数 // 容器兼容性 bool operator==(const Date& other) const { return year == other.year && month == other.month && day == other.day; } bool operator<(const Date& other) const { return (year < other.year) || (year == other.year && month < other.month) || (year == other.year && month == other.month && day < other.day); } // 迭代器支持 struct Iterator { Date* date; Iterator(Date* date) : date(date) {} Iterator& operator++() { date++; return *this; } Date& operator*() { return *date; } }; Iterator begin() { return Iterator(this); } Iterator end() { return Iterator(this + 1); } };
这个 Date
类实现了所有必要的成员函数,使其与容器兼容并支持迭代器。因此,我们可以将 Date
operator=
: Pengendali tugasan, digunakan untuk menetapkan satu objek kepada objek lain.
operator<
🎜 dan operator perbandingan lain digunakan untuk membandingkan dua objek mengikut susunan tertentu. begin()
🎜: Mengembalikan iterator yang menunjuk ke elemen pertama bekas. end()
🎜: Mengembalikan iterator yang menunjuk ke elemen terakhir bekas (atau iterator di luar elemen terakhir bekas). operator++
🎜: Operator kenaikan awalan atau postfix, digunakan untuk mengalihkan lelaran ke elemen seterusnya. operator*
🎜: Pengendali dereference, digunakan untuk mendapatkan nilai elemen yang ditunjuk oleh iterator. // 容器兼容性 vector<Date> dates; dates.push_back(Date(2023, 1, 1)); dates.push_back(Date(2023, 2, 1)); dates.push_back(Date(2023, 3, 1)); for (auto& date : dates) { // ... 使用 date 对象 } // 迭代器支持 for (auto it = dates.begin(); it != dates.end(); ++it) { // ... 使用 *it 对象 }
Tarikh
dalam bekas dan mengulanginya: 🎜rrreee🎜 Dengan melaksanakan fungsi ahli yang sesuai, kami boleh menjadikan objek kelas tersuai kami serasi dengan bekas dan iterator perpustakaan standard C++ Bekerjasama dengan lancar. 🎜Atas ialah kandungan terperinci Penjelasan terperinci tentang fungsi ahli C++: keserasian bekas dan sokongan iterator untuk kaedah objek. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!