الفريق العربي للبرمجةأرشيف المنتديات · 2000 – 2023
نسخة أرشيفية للقراءة فقط — التسجيل والمشاركة مغلقان، والمحتوى محفوظ كما كان.

تنبيه بخصوص private و protected

مغلق
بدأه Super_emad55 في 8 يونيو 2006 · 10 رد · 877 مشاهدة · في لغة C و ++C
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

بسم الله الرحمن الرحيم,

كنت اتصفح احدى المنتديات الاجنبيه... فاحد كبار السؤلين عن المنتدى كتب في احدى برامجه هذه الفقره

#include <iostream>
using namespace std;

class CPolygon {
	int width, height;
  public:
	void set_values (int a, int b)
	  { width=a; height=b;}
  };

class CRectangle: public CPolygon {
  public:
	int area ()
	  { return (width * height); }
  };

class CTriangle: public CPolygon {
  public:
	int area ()
	  { return (width * height / 2); }
  };

اريد منكم ان تحاولوا ان تكشفوا ما المشكله في هذا الكود, لماذا لايعمل؟!! قبل ان تكملوا القراءه

نرى انه من الواضح انwidth, height هما private في ال parent class “CPolygon” و هما مستخدمان في كلاس CTriangle وهو تشايلد كلاس. لذا من الواضح انه لن يعمل, طيب ماهو الحل؟؟!!

الحل هو استخدام ما يسمى ب protected في كلاس البيرنتس

ليصبح البرنامج لدي كالاتي:

#include <iostream>
using namespace std;

class CPolygon {
protected:
	int width, height;
  public:
	void set_values (int a, int b)
	  { width=a; height=b;}
  };

class CRectangle: public CPolygon {
  public:
	int area ()
	  { return (width * height); }
  };

class CTriangle: public CPolygon {
  public:
	int area ()
	  { return (width * height / 2); }
  };

اذا ماهي وظيفة ال protected , تسمح فقط للchild classes بالدخول اليها بخلاف ال private التي لا تسمح لاي كلاس بالدخول اليها, فقط الكلاس نفسه.

فقط حبيت ان انبه عن هذا الموضوع حتى لا يخطئ احد المبرمجين العرب بخطأ فادح كهذا :wacko: :wacko: :wacko:

ENG. IMAD, Programing is a way of life, It's in the air, we breath It's pumps through our veines, Without it, we soon crumble to dust

#2

يسلمو على الملاحظه الحلوه :)

بس لا تنسى انه :: بدل : في ال inheretance

:)

محتار!!! مش عارف شوتعمل؟؟! عندك مشاكل ونفسك تنحل؟؟!

عليك بالاقتراب من خالقك

عليك بصلاة الاستخارة

وعليك بالصدقة

داوو مرضاكم بالصدقة

ما نقص مال من صدقة

تصدقو ولو بشق تمرة

#3

بسم الله الرحمن الرحيم

السلام علكيم

اقتباس
بس لا تنسى انه :: بدل : في ال inheretance

ممكن توضح تقصد أية؟؟ :)

طب بدون إستخدام الinheritance وعاوز CRectangle class يستخدم الprivate or protected data in CPolygon

أستخدم فى تلك الحالة friend keyword حيث تتيح للCRectangle إستخدام الprivate and protected member's of cpolygon

Muhammad Allam

Computer Science

@Resource(MappedURL="My Blog" )

#4

لا اخي Magnom,

انت حصلك التباس اخي, فعندما تعمل انهريتنس تكتب :

و عندما تعرف داله تابعه لكلاس معين تكتب ::

وشكرا على الرد

ENG. IMAD, Programing is a way of life, It's in the air, we breath It's pumps through our veines, Without it, we soon crumble to dust

#5

تذكرت :)

كلامك صحيح

انا صارلي سنتين ما استخدمت ال C++

عشان هيك حصل معي الالتباس :)

شكرا كتير الك يا حلو

سلام :)

محتار!!! مش عارف شوتعمل؟؟! عندك مشاكل ونفسك تنحل؟؟!

عليك بالاقتراب من خالقك

عليك بصلاة الاستخارة

وعليك بالصدقة

داوو مرضاكم بالصدقة

ما نقص مال من صدقة

تصدقو ولو بشق تمرة

#6

:D لا بسيطه

ENG. IMAD, Programing is a way of life, It's in the air, we breath It's pumps through our veines, Without it, we soon crumble to dust

#7
اقتباس
طب بدون إستخدام الinheritance وعاوز CRectangle class يستخدم الprivate or protected data in CPolygon

أستخدم فى تلك الحالة friend keyword حيث تتيح للCRectangle إستخدام الprivate and protected member's of cpolygon

نعم ولكن friend أصبحت سيئة السمعة لأنها تمس بأهم مبادئ oop حيث تخترق التغليف.

#8

اخي إسماعيل ابراهيم من اين اتيت بهذا السؤال... فانا لم اره في الردود !!!

غابا friend يوجب عليك ان تستخدمها في ال overload function كل cin and cout overloaded functions

ENG. IMAD, Programing is a way of life, It's in the air, we breath It's pumps through our veines, Without it, we soon crumble to dust

#9

لا دخل للfriend في الـoverload function !

يمكنك في أي كلاس أن تعرف دالة كـ friend (رغم أنها خارج الكلاس ولا تتبعه في شيئ) فتصبح هذه الدالة ذات قدرة على الدخول الى كل المتغيرات الغير مسموح في العادة بالوصول اليها مثل private و protected

http://www.cplusplus.com/doc/tutorial/inheritance.html

تم تعديل هذه المشاركة بواسطة إسماعيل ابراهيم في 10 يونيو 2006 في 15:16

#10
اقتباس
غابا friend يوجب عليك ان تستخدمها في ال overload function كل cin and cout overloaded functions

cin and cout يمثلوا كائنات objects وتنادى overloading methodes زى علامتى الادخال والطباعة على console app

الfriend ليس لها علاقة بالoverloading function كما ذكرت ولكن تمثل كجسر bridge بين two classes

اقتباس
نعم ولكن friend أصبحت سيئة السمعة لأنها تمس بأهم مبادئ oop حيث تخترق التغليف.

فعلا ولكن مازالت تستخدم ولكنى أفضل إستخدام الAcessors حتى لا أبعد عن مبادئ الoop

Muhammad Allam

Computer Science

@Resource(MappedURL="My Blog" )

#11

اخي إسماعيل ابراهيم انا ذكرت احدى الاستخدامات التي توجب عليك استخدام friend الا و هي ال overloaded function in cin and cout

فانا لم اقل ان لا يمكن ان تستخدمها الا مع ال overloaded function

فطبعا يمكنك في أي كلاس أن تعرف دالة كـ friend فتصبح هذه الدالة ذات قدرة على الدخول الى كل المتغيرات الغير مسموح في العادة بالوصول اليها مثل private و protected

ENG. IMAD, Programing is a way of life, It's in the air, we breath It's pumps through our veines, Without it, we soon crumble to dust

هذا الموضوع مغلق.

مواضيع مشابهة