0Pricing
C++ Academy · บทเรียน

ตัวดำเนินการเลขคณิตและการเปรียบเทียบ

โอเวอร์โหลด +, -, *, /, ==, < และตัวดำเนินการที่เกี่ยวข้องตามแนวทางปฏิบัติที่ดี

ตัวดำเนินการเลขคณิตและการเปรียบเทียบ เป็นบทเรียน C++ Academy ฟรีบน CoddyKit นี่คือบทเรียนที่ 1 จากทั้งหมด 4 บทเรียน คุณสามารถอ่านบทเรียนทั้งหมดด้านล่างฟรี — จากนั้นลองปฏิบัติด้วยตัวคุณเองในเบราว์เซอร์พร้อมตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7 บทเรียนนี้เป็นส่วนหนึ่งของเส้นทางการเรียน C++ Academy และความก้าวหน้าของคุณจะซิงค์ข้ามเว็บและแอป CoddyKit คอร์ส C++ Academy มีบทเรียนทั้งหมด 4 บทเรียน

เหตุใดจึงโอเวอร์โหลดตัวดำเนินการ

การโอเวอร์โหลดตัวดำเนินการทำให้ชนิดข้อมูลของคุณทำงานเหมือนชนิดข้อมูลพื้นฐาน — v1 + v2 อ่านเข้าใจง่ายกว่า v1.add(v2) ใช้กับชนิดข้อมูลแบบค่า เช่น เวกเตอร์ จำนวนเชิงซ้อน และเงิน

การกำหนด operator+

คุณสามารถโอเวอร์โหลด + เป็นสมาชิกหรือฟังก์ชันอิสระก็ได้ ฟังก์ชันอิสระมีความสมมาตรมากกว่า

struct Vec2 {
    double x, y;
    Vec2 operator+(const Vec2& other) const {
        return {x + other.x, y + other.y};
    }
};

รูปแบบฟังก์ชันอิสระ

ฟังก์ชันอิสระทำให้อาร์กิวเมนต์ทั้งสองมีสถานะเท่าเทียมกัน ซึ่งมีประโยชน์เมื่ออาจต้องแปลงชนิดข้อมูลของฝั่งใดฝั่งหนึ่ง

Vec2 operator+(const Vec2& a, const Vec2& b) {
    return {a.x + b.x, a.y + b.y};
}

ตัวดำเนินการกำหนดค่าแบบผสม

ให้สร้าง += ก่อน แล้วจึงสร้าง + ต่อจากนั้น นี่คือรูปแบบมาตรฐานที่ควรใช้

Vec2& operator+=(const Vec2& other) {
    x += other.x;
    y += other.y;
    return *this;
}

Vec2 operator+(Vec2 lhs, const Vec2& rhs) {
    lhs += rhs;
    return lhs;
}

ตัวดำเนินการเอกภาค

ตัวดำเนินการบางตัวเป็นเอกภาค: -x, +x, !x, ~x, ++x, --x

Vec2 operator-() const { return {-x, -y}; }

การเพิ่มค่าแบบนำหน้ากับแบบตามหลัง

แบบนำหน้าไม่รับพารามิเตอร์ ส่วนแบบตามหลังรับ int จำลองเพื่อแยกความแตกต่าง

Counter& operator++();        // prefix
Counter  operator++(int);     // postfix

ตัวดำเนินการเปรียบเทียบ

ตัวดำเนินการเปรียบเทียบคืนค่าเป็น bool ฟังก์ชันอิสระเหมาะที่สุดเพื่อให้มีความสอดคล้องกัน

bool operator==(const Vec2& a, const Vec2& b) {
    return a.x == b.x && a.y == b.y;
}
bool operator!=(const Vec2& a, const Vec2& b) { return !(a == b); }

น้อยกว่าเพื่อใช้จัดลำดับ

หากชนิดข้อมูลของคุณต้องจัดเรียงหรือนำไปใช้เป็นคีย์ของแผนที่ ให้กำหนด operator< ตัวดำเนินการเชิงสัมพันธ์อื่น ๆ จะอาศัยตัวดำเนินการนี้ได้

ตัวดำเนินการต่างชนิดแบบสมมาตร

เพื่อรองรับทั้ง 3 + vec และ vec + 3 ให้กำหนดทั้งสองแบบ หรือใช้ฟังก์ชันอิสระที่ทำการแปลงชนิด

หลีกเลี่ยงผลลัพธ์ที่ไม่คาดคิด

ตัวดำเนินการที่โอเวอร์โหลดควรทำงานอย่างเป็นธรรมชาติ อย่ากำหนดความหมายใหม่ให้ + เป็นการลบ ควรยึดตามความหมายทางพีชคณิตตามปกติของตัวดำเนินการนั้น

ตัวดำเนินการที่ไม่สามารถโอเวอร์โหลดได้

ตัวดำเนินการบางตัวไม่อนุญาตให้โอเวอร์โหลด:

  • ?: — ตัวดำเนินการสามส่วน
  • . — การเข้าถึงสมาชิก (แต่ -> สามารถโอเวอร์โหลดได้)
  • :: — การระบุขอบเขต
  • sizeof, alignof, typeid

ตรวจสอบอย่างรวดเร็ว

รูปแบบการนำไปใช้มาตรฐานสำหรับ operator+ กับชนิดข้อมูลที่ผู้ใช้กำหนดคืออะไร

สรุปทบทวน

การโอเวอร์โหลดตัวดำเนินการทำให้ชนิดข้อมูลที่ผู้ใช้กำหนดใช้งานได้เป็นธรรมชาติราวกับชนิดข้อมูลในภาษา ควรนำการกำหนดค่าแบบผสมไปใช้ก่อน แล้วจึงนำการคำนวณพื้นฐานไปใช้ ตัวดำเนินการเปรียบเทียบควรเป็นฟังก์ชันอิสระ ยึดตามความหมายตามธรรมเนียม — ความประหลาดใจคือข้อบกพร่อง

คำถามที่พบบ่อย

บทเรียน “ตัวดำเนินการเลขคณิตและการเปรียบเทียบ” ฟรีหรือไม่

ใช่ — ข้อความเต็มของ “ตัวดำเนินการเลขคณิตและการเปรียบเทียบ” ฟรีให้อ่านที่นี่บนเว็บ เพื่อปฏิบัติแบบโต้ตอบ (ตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7) และปลดล็อคส่วนที่เหลือของคอร์ส C++ Academy ให้อัปเกรดเป็น CoddyKit PRO คอร์ส C++ Academy มีบทเรียนทั้งหมด 4 บทเรียน

คุณจะเรียนรู้อะไรในบทเรียน “ตัวดำเนินการเลขคณิตและการเปรียบเทียบ”

โอเวอร์โหลด +, -, *, /, ==, < และตัวดำเนินการที่เกี่ยวข้องตามแนวทางปฏิบัติที่ดี คุณปฏิบัติ C++ Academy ด้วยโค้ดที่ใช้งานได้จริงที่คุณเรียกใช้โดยตรงในเบราว์เซอร์ และติวเตอร์ AI ตลอด 24/7 ตอบคำถามของคุณขณะที่คุณไปผ่านบทเรียน

คุณต้องมีประสบการณ์ก่อนที่จะเริ่มเรียน C++ Academy หรือไม่

ไม่จำเป็นต้องมีประสบการณ์มาก่อน C++ Academy บน CoddyKit ออกแบบมาสำหรับผู้เริ่มต้นไปจนถึงผู้เรียนขั้นสูง คุณสามารถเริ่มต้นที่นี่หรือเริ่มจากตัวแรกและเรียนด้วยความเร็วของคุณเอง นี่คือบทเรียนที่ 1 จากทั้งหมด 4 บทเรียน

บทเรียน “ตัวดำเนินการเลขคณิตและการเปรียบเทียบ” ใช้เวลานานแค่ไหน

บทเรียน CoddyKit ส่วนใหญ่ใช้เวลาประมาณ 5–10 นาที แต่ละบทเรียนจึงสั้นและเป็นแบบโต้ตอบ คุณสามารถก้าวหน้าอย่างต่อเนื่องและกลับมาเรียนต่อจากตรงที่เพิ่งหยุดบนเว็บและแอปได้เลย

ฉันเขียนและรันโค้ดในบทเรียน C++ Academy นี้ได้ไหม

ได้ บทเรียน C++ Academy ทุกบทมีตัวแก้ไขโค้ดในตัว คุณจึงเขียนและรันโค้ดจริงได้เลยในเบราว์เซอร์ และได้รับข้อเสนอแนะจาก AI ในทันที — ไม่ต้องติดตั้งในเครื่องของคุณ

บทเรียนทั้งหมดในหลักสูตรนี้

  1. ตัวดำเนินการเลขคณิตและการเปรียบเทียบ
  2. ตัวดำเนินการแทรกและดึงข้อมูลจากกระแส
  3. ตัวดำเนินการดัชนีและเรียกฟังก์ชัน
  4. ตัวดำเนินการเปรียบเทียบสามทางใน C++20
← กลับไปที่ C++ Academy