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

أرجو شرح هذا الكود بالتقصيل ..

مغلق
بدأه المشتاقة للرحمن في 6 نوفمبر 2007 · 3 رد · 648 مشاهدة · في الأسئلة المجابة
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

السلام عليكم و رحمة الله و بركاته:أرجو شرح هذا الكود بالتقصيل ..الكود سهل لكن عقدتني الدالة student& addbouns

ولماذا استخدمناها؟و متى نستخدم الدوال التي مثل هذه التي ترجع object

#include <iostream>
using namespace std;

class Student{

private: 
	int mark;

public: 
	//Default constructor needed to create the array
	Student(){}
	Student(int m){mark=m;}

	int getMark(){return mark;}
	void setMark(int m){mark=m;}
	void addMarks(int m){mark+= m;}
};


//array of students were given a bonus of 2 marks

Student& addBonus(Student& s){
	s.addMarks(2);
	return s;
}

//A function that takes an array of 5 students, uses the above function to give
//each student a bonus, then sets his mark to 100 if it exceeds 100
void enforceMax(Student arrayOfStudents[5]){
	for(int i=0; i<5; i++){
		if(addBonus(arrayOfStudents).getMark()>100){
			arrayOfStudents.setMark(100);
		}
		cout<< "marks of Student: " << arrayOfStudents.getMark()<< endl;
	}
}

int main(){
	//create empty array of students. 
	Student s[5];

	//populate array with students
	s[0]=Student(20);
	s[1]=Student(99);
	s[2]=Student(70);
	s[3]=Student(100);
	s[4]=Student(85);

	enforceMax(s);

	return 0;
}

تم تعديل هذه المشاركة بواسطة المشتاقة للرحمن في 6 نوفمبر 2007 في 18:07

#2

ارجوكم ساعدوني

#3

we call this return by reference function

any normal function that return a value has this form :

VarRetVal = MyFunctionCall();

but in this function specially we can do both forms :

the previous and this :

MyFunctionCall() = VarMyAssignVal;

it's somewhat strange but let's see what it can do in your program :

if i say :

Lvar = addBonus(stdVar);

then the stdVar will be used in the function as "s" and this line will execute for it :

s.addMarks(2);

then this s will return for the left side of the function

the Lvar variable ...

now if i execute the function like that :

addBonus(stdVar) = Rvar;

stdVar will be passed as before , the first line will execute

now for the return statment s will take the value of Rvar and not returning it ... the converse will happen I mean

I hope this can helps

Programmer&Cracker CS

MyBlog: Blog.Amahdy.com

MyWebSite: www.Amahdy.com

#4

وعليكم السلام ورحمه الله وبركاته

هذه هي الداله enforceMax بدون استخدام الدالة addBonus

void enforceMax(Student arrayOfStudents[5]){
	for(int i=0; i<5; i++){
		   arrayOfStudents.addMarks(2);
		if((arrayOfStudents).getMark()>100){
			arrayOfStudents.setMark(100);
		}
		cout<< "marks of Student: " << arrayOfStudents.getMark()<< endl;
	}
}

لاحظ اننا استخدمنا تعليمة اضافية وهي :

arrayOfStudents.addMarks(2);

لكن لو استخدمنا الدالة addBonusومررنا لها (s) فانها

ستتولى عملية اضافة على الدرجات وترجع بنفس هذا الكائن وبالتالي

يمكننا استخدام النقطة(.) بعد استدعااء الدالة واستخدام getMark بعد النقطه

لكي نختبر الدرجه .

مثل لو اردنا ان نطبع نستخدم

cout << m << c << r << endl;

بدلا من كتابة :

cout << m;
cout << c;
cout << r;
cout << endl;

لأن المعامل (<<) يعيد كائن وبالتالي نستخدم التعليمة الأولى

ومثل عندما نكتب عمليه جمع

نكتبها a=1+5+9+7+3

ولانكتبها

a=1+5

a=a+9

a=a+7

a=a+3

نفعل الطريقة الأولى للاختصار

لكن لو استغنينا عن تلك الدالة فالنتيجه نفسها.

هذا سبب اعادة كائن.

اما اعداته بالعنوان فهذا لأننا مررنا الكائن له بالعنوان ولو مررناه بالقيمه فسنتج ان الداله :

(addBonus) ستنشئ نسخه عن الكائن وتزيد الدرجه , وحتى هنا لامشكله .

لكن عندما نريد اعادة عنوان الكائن فان الداله ستعيد عنوان نسخة الكائن التي اصبحت خارج المدى بنهاية الدالة(addBonus)

لهذا عندما نريد اعادة عنوان كائن فيجب ان نتأكد انه غير خارج المدى والا فاننا سنعيد عنوان تمت ازالته من الذاكره.

كما ان اعادة الكائن بالعنوان يوفر جزء من الذاكره بدلا من نسخ الكائن وهذا يستهلك وقت وذاكره.

تم تعديل هذه المشاركة بواسطة الفدرالي في 21 نوفمبر 2007 في 00:19

أتراك عين والعيون لها مدى *** ماجاوزته ولامدى لمداكا

إن لم تكن عيني تراك فإنني *** في كل شيء أستبين علاكا

يامنبت الأزهار عاطرة الشذى *** هذا الشذى الفواح نفح شذاكا

يامجري الأنهار ماجريانها *** الا انفعالة قطرة لنداكا

يارب هذا العصر الحد عندما *** سخرت ياربي له نعماكا

او مادرى الانسان ان جميع ما *** وصلت اليه يداه من نعماكا

لو شئت ياربي هوى صاروخه *** او لو أردت لماستطاع حراكا

فليرض عني الناس او فيسخطوا *** انا لم اعد اسعى لغير رضاكا

ذقت الهوى مرا ولم اذق الهوى *** يارب حلوا قبل ان اهواكا

يارب عدت الى رحابك تائبا *** مستسلما مستمسكا بعراكا

اتردني وترد صادق توبتي؟ *** حاشاك ترفض تائبا حاشاكا

فأقبل دعائي واستجب لرجاوتي*** ماخاب يوما من دعا ورجاكا

ياايها الإنسان مهلا مالذي *** بالله جل جلاله أغراكا؟

فاسجد لمولاك القدير فإنما *** لابد يوما تنتهي دنياكا

---------------------------------------------------------------

لا إله إلا أنت سبحانك إني كنت من الظالمين

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

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