ملخصات وحدة ( 4 ) برمجة 1

hmd-it
2

>>> ملخصات مقرر في المادة <<<

أقدم لكم ملخصات المقررة معنا في مقرر برمجة 1 

الوحدة الرابعة
الدوال الصديقة و العمليات

طرق تمرير العوامل للدوال
تمرير العوامل بالقيمة parameter passing by value 
   مثلاً عند استخدام دالة تقوم بتبديل قيم المتغيرات بتمرير المتغيرات بالشكلswap(int x, int y)  يتم استدعائها بالشكل swap1(A,B) و لكنها لن تنفذ الدالة كما نريد (أي تبديل القيم).
تمرير العوامل بالإشارة parameter passing by reference 
   هنا ستقوم الدالة بتبديل القيم و ليس كما سبق أعلاه فمثلاً استخدام * أو & لتوضيح عناوين المتغيرات في الذاكرة فعند كتابة الدالة بالشكل    swap2(int *x, int *y) فعند استدعائها نبعث عناوين المتغيرات التي نود تبديلها بالشكل التالي: .swap(&A, &B)
و هناك طريقة أخرى لتمرير العوامل بالإشارة و هو أن نعرف الدالة كالتالي    swap3(int &x, int &y)و عند استدعائها نكتب  swap(A,B).
المصفوفات و تمرير العوامل
دالة ترجع قيمة بالإشارة

مثال:
int & max(int a, int b){
if(a>b)
return a;
else
return b; }
main() {
int a=10;
int b=100;
max(a, b)=5;
}
نتيجة التنفيذ أن الدالة سترجع قيمة الأكبر و ستغيرها بالرقم 5.


What is ‘Friend’?

Friend declarations introduce extra coupling between classes
 Once an object is declared as a friend, it has access to all non-public members as if they were public

Access is unidirectional
 If B is designated as friend of A, B can access A’s non-public members; A cannot access B’s

A friend function of a class is defined outside of that class's scope


More about ‘Friend’

The major use of friends is 
to provide more efficient access to data members than the function call
to accommodate operator functions with easy access to private data members

Friends can have access to everything, which defeats data hiding, so use them carefully

Friends have permission to change the internal state from outside the class. Always recommend use member functions instead of friends to change state



Example1: Friend Functions

#include <iostream>
 using namespace std; 
class X;
 class Y {
 public: void print(X& x); }; 
class X {
 int a, b; 
friend void Y::print(X& x); 
public: X() : a(1), b(2) { } }; 
void Y::print(X& x) { cout << "a is " << x.a << endl; 
cout << "b is " << x.b << endl; }
 int main() {
 X xobj; 
Y yobj;
 yobj.print(xobj); }


Example2: Friends classes

#include <iostream> 
using namespace std;
 class X {
 int a, b; 
friend class F;
 public: X() : a(1), b(2) { } };
 class F {
 public: void print(X& x) { 
cout << "a is " << x.a << endl; 
cout << "b is " << x.b << endl; } }; 
int main() { 
X xobj; 
F fobj;
 fobj.print(xobj); }


Operator Overloading إعادة تحميل العمليات
زيادة تحميل المعاملات Operator Overloading
لغة C++ لغة غنية جدا بالمعاملات مثل معامل الجمع + و معامل الطرح – و معامل الزيادة ++ و معامل الاسناد = و معامل الإدراج >> ... الخ ، هذه المعاملات تقوم بوظائف محددة مسبقا لدى المترجم و تنطبق على تشكيلة واسعة من أنواع المتغيرات فمثلا معامل الجمع + يقوم بجمع عددين و لكنه لا يستطيع جمع كائنين أو حتى جمع سلسلتي أحرف ! – مترجم C++ يتميز بالصرامة المملة خاصة عند التعامل مع أنواع البيانات - و لكن يمكننا التغلب عليه بزيادة تحميل المعامل بحيث يستطيع أداء أشياء أخرى غير الأشياء المحددة له ! .
زيادة تحميل (إعادة توصيف ) المعاملات واحدة من أكثر إمكانيات لغة
C++ استخداماً. 
إذن فزيادة تحميل المعامل تجعلنا نتمكن من استخدامه بصورة أوسع مما
حدد له.
Operator Overloading إعادة تحميل العمليات
هو المقدرة على ربط مؤثر معين لدالة عضو في الصنف ويتم استدعاؤها عند تطبيق المؤثر على أحد كائنات الصنف . * فائدته : مؤثر الجمع ( + ) نستطيع أن نقوم بتطبيقه على عددين صحيحين أو حقيقيين ولكن لا نستطيع استخدامه مع الكائنات إلا بعد تحميله تحميلاً زائداً . ملاحظات : 1- لا ينبغي تغيير وظيفة المؤثر عند تحميله . مثلاً إذا قمنا بتحميل مؤثر الجمع فلا ينبغي استخدامه مع عملية أخرى مثل ( - , * , / ) ، لأن هذا الاستخدام يعتبر استخدام سيء لمفهوم التحميل الزائد للمؤثرات ويجعل من الصعب فهمه . 2- يمكن تحميل معظم المؤثرات الموجودة في لغة C++ بشكل زائد . 3-نستخدم الكلمة المفتاحية Operator عند القيام بتحميل مؤثر تحميلاً زائداً .
Operator Overloading إعادة تحميل العمليات
The following set of operators is commonly overloaded for user-defined classes: 
= (assignment operator) 
+ - * (binary arithmetic operators) 
+= -= *= (compound assignment operators) 
== != (comparison operators)

Overloading operators
Create a function for the class
Name function operator followed by symbol
Operator+ for the addition operator +


تحميل باقى الدرس ملف بوربونت
شرح د.سهى الأعرج

لاتنسى الاعجاب بصفحتنا وانضم الينا
||| لا تنسى الانضمام الى المدونة بالضغط هنا |||
اذا لديك أي سؤال، فلا تتردد في الاتصال بنا
.For any kind of question, please feel free to contact us.

HAMAD BASHIR
Tags:

إرسال تعليق

2تعليقات

اطرح اي سؤال خاص بالموضوع في التعليقات

  1. تسلم الايادي
    مش عارفه احمل الباقي من وين؟؟

    ردحذف
    الردود
    1. الباقي موجود
      ابحثي في البحث المخصص برمجة1
      بالتوفيق

      حذف
إرسال تعليق