سؤال

تكرار ممكن:
لماذا هذا غير مسموح به في C ++؟

لماذا هذا غير مسموح به في C ++ ... ؟؟

class base
{
  private:

  public:
      void func()
         {
              cout<<"base";
         }  


};

class derived : private base
{
  private:


  public:
            void func()
         {
              cout<<"derived";
              }


};

int main()
{
base * ptr;
ptr = new derived;
((derived *)ptr)->func();
return 0;
}

أحصل على خطأ

**61 C:\Dev-Cpp\My Projects\pointertest.cpp `base' is an inaccessible base of `derived'** 

سؤالي هو أنه نظرًا لأن FUNC () محددة عام في الفئة المشتقة والبيان ((مشتق *) PTR)-> func () ؛ تحاول عرض func () من مستمد.. لماذا هناك مشكلة يمكن الوصول إليها بسبب طريقة الميراث .. كيف يؤثر وضع الميراث (الخاص) على المكالمة على الرغم من أن لدي بالفعل Func () المشتقة من الفئة المشتقة ..؟

إذا تم تغيير طريقة الميراث إلى الأماكن العامة ، أحصل على النتيجة المرجوة الخاصة بي .. ولكن حالة يكون فيها FUNC () خاصًا في القاعدة (بحيث لا يتم توريث FUNC () كما هو موضح) وأيضًا func () عام مشتق وطريقة من الميراث عام لماذا لا تزال تحصل على النتيجة المرجوة .. هل يجب أن أحصل على خطأ في الترجمة كما في الحالة السابقة ؟؟

أنا مرتبك تمامًا .. أخبرني كيف يعمل المترجم في هذه الحالة .. ؟؟

هل كانت مفيدة؟

المحلول

لا يمكنك ترك مؤشر الأساس يشير إلى الكائن المشتق عندما يكون هناك ميراث خاص.

الميراث العام يعبر عن هو صلة. الميراث الخاص من ناحية أخرى يعبر عن ملف نفذت من حيث صلة

يشير خطأ التجميع إلى الخط:ptr = new derived;

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top