Computer >> คอมพิวเตอร์ >  >> การเขียนโปรแกรม >> C++

โปรแกรม C++ เพื่อโอเวอร์โหลดตัวดำเนินการสกัด


สมมติว่าเรามีคลาส 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.