สมมติว่าเรามีคลาส Person ที่มีสองแอตทริบิวต์ first_name และ last_name นอกจากนี้ยังมีสองวิธีที่เรียกว่า get_first_name() และ get_last_name() เพื่อเรียกค้นหรือตั้งชื่อและนามสกุลตามลำดับ เราจะต้องโอเวอร์โหลดตัวดำเนินการสกัด (<<) เพื่อพิมพ์ชื่อและนามสกุลเพื่อพิมพ์โดยใช้คำสั่ง cout
ดังนั้น หากการป้อนข้อมูลเป็นเหมือนวัตถุที่มีชื่อและนามสกุล ("Sumit", "Ray") ผลลัพธ์จะเป็นชื่อ − Sumit นามสกุล − Ray
เพื่อแก้ปัญหานี้ เราจะทำตามขั้นตอนเหล่านี้ -
-
ในการโอเวอร์โหลดโอเปอเรเตอร์การแยก ควรกำหนดไว้ภายนอกคลาส
-
ประเภทผลตอบแทนจะเป็นข้อมูลอ้างอิง ostream
-
พารามิเตอร์อินพุตเป็นตัวแปรอ้างอิงโอสตรีม os และตัวแปรอ้างอิงอ็อบเจ็กต์
-
ใช้ os แยกส่วนต่าง ๆ ของวัตถุในลำดับที่เหมาะสม
-
ส่งคืนการอ้างอิงอ็อบเจ็กต์ os
ตัวอย่าง
ให้เราดูการใช้งานต่อไปนี้เพื่อความเข้าใจที่ดีขึ้น -
#include <iostream> using namespace std; class Person { private: string f_name; string l_name; public: Person(string first_name, string last_name) : f_name(first_name), l_name(last_name) {} string& get_first_name() { return f_name; } string& get_last_name() { return l_name; } }; ostream& operator<<(ostream& os, Person& p) { os << "First name: " << p.get_first_name() << ", Last name: " << p.get_last_name(); return os; } int main(){ Person p("Sumit", "Ray"); cout << p << ", he is our member."; }
อินพุต
p("Sumit", "Ray")
ผลลัพธ์
First name: Sumit, Last name: Ray, he is our member.