سؤال عن ال enheritance,class,object,pointer في ++C

السلام عليكم في الحقيقة شاهدت فيديو على اليوتيوب و لم افهم بعض الأشياء و هذا ما جعلني اطرح عليكم المشكلة التي لم افهمها عسى احدكم يقدر يوضحلي الفكرة :

في الأول نفترض ان لدينا كلاس اسمه test1 و كلاس اخر اسمه test2 وهذا الاخير ورث جميع خصائص الكلاس test1 ثم في main قمنا بعمل object من نوع test2 هكذا

;test2 ot

صار لدينا object ot من الكلاس test2 ثم عملنا pointer من نوع test1 واشرناه الى ال object ot الذي هو من نوع test2 (الي ورث خصائص test1) هكذا :

;test1 *pt = &ot

السؤال كيف هذا ممكن ؟ لان صاحب الفيديو عمل هذا الشي و اشتغل البرنامج اليس من الفروض ان ال pointer يكون من نفس نوع الكلاس الي يؤشر عليه اذا من الممكن احدكم يفسرلي الفكرة بوضوح و ما الفرق بين هاذين السطرين ؟

;test1 *pt = &ot

;test2 *pt = &ot (من المفروض ان تكون هكذا العبارة الصحيحة او لا)

و شكرا لكم


التعليق السابق
ceferinoj171 أضف ردا

شكرا أخي على تفاعلك

لكن في السطر cout<<pt.r //لا يمكن لان البروبرتي ار خاصة فقط بتست2 //

اولا يجب ان تكتب cout << pt - > r ولكن لا علينا اضن انك غفلت عن ذلك صديقي :)

المشكلة اني لم افهم لماذا لا يمكن ذلك اليس المؤشر pt يؤشر على ot الذي هو objet من test2 من المفروض ان له الامكانية ان يستخدم r اذا لك تفسير منطقي لذلك المرجوا ان تكتبه و شكرا مرة اخرى للتفاعل

wada3n أضف ردا

أهلا أخي

أجل لقد قمت متعمدا بذلك حتى أريك أنك لاتستطيع الولوج إلى الخاصية r من خلال مؤشر نحو كائن خاص بها / كانت ككومنت صديقي

لا يمكن أخي لأن أساسا الأوبجكت test1 لايملك الخاصية r وأنت عندما قمت بعمل مؤشر نحو الكائن الذي ورث منه أنت كأنك أخذت فقط المشتركات بينهما / وكما وضعت في الصورة العكس لايمكن لأن التست2 لايمكن أن يحتوى في كائن من تست 1 هل فهمتني ؟

بالمناسبة هذه من unsafety في c++ حسب معرفتي لو جربتها في لغة مثل rust لم تتمكن من ذلك