إذن ، يمكن أن يكون للبنيت وظيفة افتراضية ودعم الميراث؟ ما الفرق مع الفصول بعد ذلك؟ ما هو الغرض الحقيقي من إخفاء المعلومات؟ [مكرر

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

سؤال

تكرار ممكن:
ما هي الاختلافات بين البنية والطبقة في C ++

http://www.cplusplus.com/reference/std/typeinfo/type_info/

أظن أن "أستاذي" لم يخبرني كثيرًا عن الاختلافات بين الهيكل والفصول الدراسية في C ++.

قرأت في سؤال آخر عن أن الميراث ، بنية عامة بشكل افتراضي ... أعتقد أيضًا أن الهيكل ليس لديه منشئون/مدمرات ...

ما هي الاختلافات الأخرى إذن؟ هل يهم ذلك كثيرًا؟

وعند الحديث عن السمات/الأساليب الخاصة/المحمية ، لا يمكن الوصول إليها في وقت التشغيل ، فقط لأن المترجم يخبرها في وقت الترجم ويبلغ عن خطأ ، أليس كذلك؟ ثم مقارنة تلك الميزات بالفصول الدراسية ، ما الذي يجلبه "إخفاء المعلومات" حقًا للمبرمج؟ هل هنا حتى عندما يعيد شخص ما استخدام الفصل ، لن يسيء هذا الشخص إلى استخدام الفصل لأنه سيتم الإبلاغ عن الأشياء الخاصة/المحمية من قبل المترجم؟

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

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

المحلول

بقدر ما يتعلق الأمر بالمترجم ، لا يوجد فرق بين struct و class بخلاف إمكانية الوصول الافتراضي. إنها مجرد كلمات رئيسية مختلفة لتحديد نفس الشيء. لذلك ، يمكن أن تحتوي الهياكل على مُنشئين ومدمرين وفصول أساسية ووظائف افتراضية وكل شيء.

بقدر ما يتعلق الأمر بالمبرمجين ، فهي اتفاقية شائعة للاستخدام struct بالنسبة للفصول الدراسية التي لا تحتوي على أي من هذه الأشياء (على وجه التحديد جراب) ، أو للذهاب إلى أبعد من ذلك والاستخدام struct فقط للفئات التي لا تحتوي على وظائف عضو معرفة من قبل المستخدم على الإطلاق ، فقط أعضاء البيانات العامة. في بعض الأحيان ، يفسد الناس هذه الاتفاقية ، لأنه من السهل بشكل مدهش التفكير في أن الفصل الدراسي هو جراب عندما لا يكون ذلك كذلك ، لكنهم على الأقل يحاولون.

في C ++ ، على الأقل ، لا علاقة للمعلومات على الإطلاق بالأمان. ضع ذلك من عقلك. إنه لا يوفر أي أمان ، إلا بالطريقة العامة نفسها التي تجعل أي ممارسة ترميز جيدة للرمز أسهل في التفكير ، وبالتالي يرتكب المبرمجون أخطاء أقل.

الغرض من المعلومات هو السماح لك بتغيير التنفيذ لاحقًا ، ربما لإزالة أو إعادة تسمية أعضاء القطاع الخاص ، آمنًا في معرفة أن أي من مستخدمي الفصل الخاص بك ، خارج الفصل نفسه والأصدقاء ، يشير إليهم. من الواضح أنه من المفيد القيام بذلك بالضبط ، ولكن أقل وضوحًا وربما الأهم تريد العملاء للاستخدام ، ويمكن لمستخدمي الفصل الخاص بك أن يتوقعوا بحق العمل. يمكنك تحقيق نفس الشيء من حيث المبدأ مع الوثائق ، ولكن في الممارسة العملية ، من الجيد أن يقوم المترجم بفرض القواعد.

إنها ليست "آمنة" لأنه في أي مترجم معين ، من الممكن العمل في مجال الحماية العامة/الخاصة. ولكن إذا قام مستخدمو الفصل الخاص بك بذلك ، فإنهم يستخدمون بعض الاختراق الشنيع ، فهم يستحقون أن يتوقفوا عن التجميع/العمل عند تغيير فصلك ، وإذا جاءوا إليك للشكوى ، يمكنك الضحك عليهم.

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