ตัวดำเนินการเลขคณิตและการเปรียบเทียบ
โอเวอร์โหลด +, -, *, /, ==, < และตัวดำเนินการที่เกี่ยวข้องตามแนวทางปฏิบัติที่ดี
ตัวดำเนินการเลขคณิตและการเปรียบเทียบ เป็นบทเรียน 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 ในทันที — ไม่ต้องติดตั้งในเครื่องของคุณ
บทเรียนทั้งหมดในหลักสูตรนี้
- ตัวดำเนินการเลขคณิตและการเปรียบเทียบ
- ตัวดำเนินการแทรกและดึงข้อมูลจากกระแส
- ตัวดำเนินการดัชนีและเรียกฟังก์ชัน
- ตัวดำเนินการเปรียบเทียบสามทางใน C++20