هل من الممكن الوصول إلى أعضاء من الطبقة الخاصة؟

StackOverflow https://stackoverflow.com/questions/729363

  •  05-09-2019
  •  | 
  •  

سؤال

هل من الممكن الوصول إلى أعضاء خاصين في الفصل في C ++.

شريطة أن يكون لديك وظيفة صديق ولا تملك الوصول إلى تعريف الفصل

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

المحلول

تقصد استخدام بعض الحساب المؤشر للحصول على الوصول؟ من الممكن ولكنها خطيرة بالتأكيد. نلقي نظرة على هذا السؤال أيضا: الوصول إلى الأعضاء الخاص

نصائح أخرى

أعتقد أن هناك بعض خدعة المدرسة القديمة مثل هذا:

#define private public
#include "header.h"
#define private private

لكنك تثبط بشدة للقيام بذلك (لقد قرأت بسرعة أن شيئا ما قال شيئا في معيار C ++) - إذا كنت ترغب في قراءة المزيد حول هذه Google ل "# Define Private Promment"

حسنا، قد أتحدث بالرقبة، لكنني أعتقد أنك يمكن أن تحاول تحديد فئة "توأم" مع نفس العضلات التي تريد تعديلها ولكن مواد معدلات عامة / خاصة مختلفة ثم استخدم REINTEPRET_CACT لإلقاء الفئة الأصلية لك يمكن الوصول إلى الأعضاء الخاصين.

انها القناة قليلا ؛-)

قليلا من التعليمات البرمجية لشرح الفكرة:

class ClassWithNoAccess 
{
public:
  someMethod();

private:
  int someVar;
};

class ClassTwin 
{
public:
  someMethod();

public:
  int someVar;
}

وفي مكان ما في الكود:

ClassWithNoAccess* noAccess = new ClassWithNoAccess();
ClassTwin* twin = reinterpret_cast<ClassTwin *>(noAccess);
twin->someVar = 1;

تحرير: مثل شخص ما كتب بالفعل من قبل، هذا قد يعمل ولكن المعيار لا يضمن أن ترتيب المتغيرات مع المعدل العام والخاص سيكون هو نفسه

حتى لو كان ذلك ممكنا من خلال بعض الاختراق السيئة - انظر المشاركات السابقة - يجب ألا تفعل ذلك.

يوجد التغليف لغرض جيد للغاية، وإعداد عضو فئة كوسائل خاصة يعني أن المطور لم ينوي أي شخص في الفوضى مع هذا العضو. يجب أن يعني ذلك

"ليس لديك للوصول إلى هذا العضو من أجل استخدام الواجهة العامة للمدى الكامل"

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