ฉันจะเสี่ยงต่อการระบุที่ชัดเจน: คุณเรียกใช้ฟังก์ชันนี้ถ้ามันถูกกำหนดในคลาสพื้นฐานมันจะพร้อมใช้งานโดยอัตโนมัติในคลาสที่ได้รับ (นอกเสียจากว่าprivate
)
base_class::foo(...)
หากมีฟังก์ชั่นที่มีลายเซ็นเหมือนกันในชั้นเรียนมาคุณสามารถกระจ่างได้โดยการเพิ่มชื่อชั้นฐานที่ตามมาด้วยสองทวิภาค คุณควรทราบว่าแตกต่างจาก Java และ C #, C ++ ไม่ได้มีคำหลักสำหรับ "ชั้นฐาน" a ( super
หรือbase
) ตั้งแต่ c ++ สนับสนุนมรดกหลายซึ่งอาจนำไปสู่ความคลุมเครือ
class left {
public:
void foo();
};
class right {
public:
void foo();
};
class bottom : public left, public right {
public:
void foo()
{
//base::foo();// ambiguous
left::foo();
right::foo();
// and when foo() is not called for 'this':
bottom b;
b.left::foo(); // calls b.foo() from 'left'
b.right::foo(); // call b.foo() from 'right'
}
};
อนึ่งคุณไม่สามารถสืบทอดโดยตรงจากคลาสเดียวกันสองครั้งเนื่องจากจะไม่มีวิธีการอ้างถึงคลาสพื้นฐานใด ๆ เหนือคลาสอื่น
class bottom : public left, public left { // Illegal
};