ฉันมีคลาสที่แน่นอนและฉันต้องการสร้างโอเปอเรเตอร์ 2 ตัวที่จะทำงานร่วมกัน
เช่นคลาสที่มีอาร์เรย์ และฉันต้องการเปลี่ยนดัชนีบางตัวในอาร์เรย์
เช่นนี้ obj[3]=5
เป็นไปได้ไหม? ถ้าใช่ ทำอย่างไร?
นี่คือรหัสที่ฉันทำสำหรับตัวดำเนินการ []
double Polynomial::operator[](int index) const {
int maxT = this->currentMax;
if (index > 0 && index < this->getDegree(false))
return this->coefficients[index];
cout << "overflow in index";
system("pause");
}
operator[]
จะไม่ใช่เรื่องผิด แต่ก็ถือว่าไม่ธรรมดา คอนเทนเนอร์ส่วนใหญ่จะข้ามการตรวจสอบขอบเขตในoperator[]
(เพื่อให้เร็วที่สุด) และจัดเตรียมฟังก์ชันสมาชิกที่เรียกว่าat()
ซึ่งจะตรวจสอบขอบเขตและส่งข้อยกเว้นหากindex
อยู่นอกขอบเขต อย่างไรก็ตามindex
โดยปกติควรเป็นประเภทunsigned
เช่นsize_t
นี่คือตัวอย่างง่ายๆ ในการเล่น: godbolt.org/z/qr26cd - person Ted Lyngmo   schedule 22.04.2020[]=
ดังนั้นคุณจึงไม่สามารถโอเวอร์โหลดได้ คุณสามารถโอเวอร์โหลดตัวดำเนินการ[]
และตัวดำเนินการ=
ได้ - person Thomas Matthews   schedule 22.04.2020[]=
พูดถึงหรือบอกเป็นนัย ชื่อเรื่องกล่าวถึง[]
และ=
แยกกัน - person Ted Lyngmo   schedule 22.04.2020[]
และ=
แยกกัน - person Thomas Matthews   schedule 22.04.2020operator[]
และoperator=
สำหรับฉันและการใช้งานoperator[]
(ไม่ใช่operator[]=
) ก็ทำให้เช่นกัน ฉันคิดว่า OP รู้ว่าพวกเขาเป็นผู้ดำเนินการที่แยกจากกัน - person Ted Lyngmo   schedule 22.04.2020