成員函數是定義在類別上下文中,與物件相關聯的函數,可存取物件資料和方法。為了使其與容器相容,自訂類別必須提供賦值運算子、相等和不相等運算子、比較運算子。此外,為了支援迭代器,類別應提供傳回指向容器起始和終止元素迭代器的 begin() 和 end() 函數,以及解引用和遞增迭代器的運算子。
C 成員函數詳解:物件方法的容器相容性和迭代器支援
在C 中,成員函數是一種特殊類型的函數,它定義在類別的上下文中。與普通函數不同,成員函數與物件關聯,這意味著它們可以存取該物件的資料成員和方法。
容器相容性
C 標準函式庫包含許多容器類,例如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
物件儲存在容器中並遍歷它們:
// 容器兼容性 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 对象 }
透過實作適當的成員函數,我們可以使我們的自訂類別物件與C 標準函式庫的容器和迭代器無縫協同工作。
以上是C++ 成員函數詳解:物件方法的容器相容性和迭代器支持的詳細內容。更多資訊請關注PHP中文網其他相關文章!