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

มรดกและมิตรภาพในภาษา C++


ใน C ++ มิตรภาพไม่ได้รับการสืบทอด หมายความว่า หากคลาสหลักมีฟังก์ชันของเพื่อน คลาสย่อยจะไม่รับฟังก์ชันดังกล่าวเป็นเพื่อน

ในตัวอย่างนี้ จะทำให้เกิดข้อผิดพลาดเนื่องจากฟังก์ชัน display() เป็นเพื่อนของ MyBaseClass แต่ไม่ใช่เพื่อนของ MyDerivedClass display() สามารถเข้าถึงสมาชิกส่วนตัวของ MyBaseClass

ตัวอย่าง

#include <iostream>
using namespace std;
class MyBaseClass {
   protected:
      int x;
   public:
      MyBaseClass() {
         x = 20;
      }
      friend void display();
};
class MyDerivedClass : public MyBaseClass {
   private:
      int y;
   public:
      MyDerivedClass() {
         x = 40;
      }
};
void display() {
   MyDerivedClass derived;
   cout << "The value of private member of Base class is: " << derived.x << endl;
   cout << "The value of private member of Derived class is: " << derived.y << endl;
}
main() {
   display();
}

ผลลัพธ์

[Error] 'int MyDerivedClass::y' is private
[Error] within this context