2 BytesC++ course_2014_c7_ operator overloading, friends and references

Post on 27-Jul-2015

36 views 2 download

transcript

Kinan keshkeh

IT Engineering-Damascus University

3rd year

Summer course- 2014

2 bytes team

Welcome !

Hi my friends !! ?

Friends !

Friend functions !

Friend functions

• Declarations : friend returnedtype FuncName(..,…); just in declaration .

• A friend function of a class is not a member function of the class, but it has access to the private members of that class (to both private member variables and private member functions) just as a member function does.

Friend functions

Friend functions

Friend functions

Friend Classes !

Friend Classes

• in the same way that a function can be a friend of a class.

• If the class F is a friend of the class C, then every member function of the class F is a friend of the class C.

Reference !

Reference

• A reference is the name of a storage location.

• You can link more then VariablesName with the same address !!

• robert is another name for bob

Reference

• A reference is the name of a storage location.

• You can link more then VariablesName with the same address !!

• robert is another name for bob

Reference

Reference

Output: 99 42

Reference

Output: 99 42

Reference

Output: 99 42

overloaded operators !

overloaded operators

Overloaded Operators

Like what we took in past lecture + , == , = , - , …..

A little difference in declaration and calling

overloaded operators

overloaded operators as standalone functions

overloading as member functions

overloaded operators

• Overloaded operators as standalone functions :

const ClassName operator +(const ClassName& amount1, const ClassName& amount2);

ClassName m3 = (m1 + m2);

overloaded operators

const ClassName operator +(const ClassName& amount1, const ClassName& amount2);

• (m1 + m2).input( );

• ClassName m3 = (m1 + m2); m3.input( );

False

True

• Overloaded operators as standalone functions :

overloaded operators

const ClassName operator +(const ClassName& amount1, const ClassName& amount2);

• (m1 + m2).input( );

• ClassName m3 = (m1 + m2); m3.input( );

False

True

• Overloaded operators as standalone functions :

overloaded operators

const ClassName operator +(const ClassName& amount1, const ClassName& amount2);

• (m1 + m2).input( );

• ClassName m3 = (m1 + m2); m3.input( );

False

True

• Overloaded operators as standalone functions :

overloaded operators

const ClassName operator +(const ClassName& amount1, const ClassName& amount2);

• & Reference for more efficient( it’s not important)

• Overloaded operators as standalone functions :

overloaded operators

const ClassName operator +(const ClassName& amount1, const ClassName& amount2);

• The same way for ” - ” , “ ++ ”

• Overloaded operators as standalone functions :

overloaded operators

• Overloading as member functions :

const ClassName operator +(const ClassName& amount);

ClassName m3 = (m1 + m2);

From Class members !! (private)

overloaded operators • Overloaded operators as standalone functions :

overloaded operators • Overloaded operators as standalone functions :

overloaded operators • Overloaded operators as standalone functions :

overloaded operators • Overloaded operators as standalone functions :

overloaded operators • Overloaded operators as standalone functions :

overloaded operators

• Overloaded operators as standalone functions :

overloaded operators • Overloaded operators as standalone functions :

Output:

overloaded operators

• Overloading “<<” and “>>” operators:

• Make you use “ cin “ and “ cout” in main() , with Objects !!

• It’s better to define them as friends functions !

class Class_Name { . . . public: . . . friend istream& operator >>(istream& Parameter_1,Class_Name& Parameter_2); friend ostream& operator <<(ostream& Parameter_3,const Class_Name& Parameter_4);

overloaded operators

• Overloading “<<” and “>>” operators:

istream& operator >>(istream& Parameter_1,Class_Name& Parameter_2) { . . . return Parameter_1 } ostream& operator <<(ostream& Parameter_3, const Class_Name& Parameter_4) { . . . return Parameter_3 }

class Class_Name { . . . public: . . . friend istream& operator >>(istream& Parameter_1,Class_Name& Parameter_2); friend ostream& operator <<(ostream& Parameter_3,const Class_Name& Parameter_4);

overloaded operators

• Overloading “<<” and “>>” operators:

istream& operator >>(istream& Parameter_1,Class_Name& Parameter_2) { . . . return Parameter_1 } ostream& operator <<(ostream& Parameter_3, const Class_Name& Parameter_4) { . . . return Parameter_3 }

Do the input operations with Parameter_1 “ >>“

class Class_Name { . . . public: . . . friend istream& operator >>(istream& Parameter_1,Class_Name& Parameter_2); friend ostream& operator <<(ostream& Parameter_3,const Class_Name& Parameter_4);

overloaded operators

• Overloading “<<” and “>>” operators:

istream& operator >>(istream& Parameter_1,Class_Name& Parameter_2) { . . . return Parameter_1 } ostream& operator <<(ostream& Parameter_3, const Class_Name& Parameter_4) { . . . return Parameter_3 }

Then return Parameter_1

class Class_Name { . . . public: . . . friend istream& operator >>(istream& Parameter_1,Class_Name& Parameter_2); friend ostream& operator <<(ostream& Parameter_3,const Class_Name& Parameter_4);

overloaded operators

• Overloading “<<” and “>>” operators:

istream& operator >>(istream& Parameter_1,Class_Name& Parameter_2) { . . . return Parameter_1 } ostream& operator <<(ostream& Parameter_3, const Class_Name& Parameter_4) { . . . return Parameter_3 }

Do the output operations and put them in Parameter_3“ <<“

class Class_Name { . . . public: . . . friend istream& operator >>(istream& Parameter_1,Class_Name& Parameter_2); friend ostream& operator <<(ostream& Parameter_3,const Class_Name& Parameter_4);

overloaded operators

• Overloading “<<” and “>>” operators:

istream& operator >>(istream& Parameter_1,Class_Name& Parameter_2) { . . . return Parameter_1 } ostream& operator <<(ostream& Parameter_3, const Class_Name& Parameter_4) { . . . return Parameter_3 }

Then return Parameter_3

overloaded operators • Overloading “<<” and “>>” operators:

overloaded operators • Overloading “<<” and “>>” operators:

overloaded operators • Overloading “<<” and “>>” operators:

overloaded operators

• Overloading “<<” and “>>” operators:

Output:

overloaded operators

• Overloading “++” , “--” and “ [] ” operators:

overloaded operators • Overloading “++” , “--” operators:

overloaded operators • Overloading “++” , “--” operators:

overloaded operators • Overloading “++” , “--” operators:

overloaded operators

Output:

• Overloading “++” , “--” operators:

overloaded operators • Overloading “ [] “ operator:

overloaded operators • Overloading “ [] “ operator:

overloaded operators • Overloading “ [] “ operator:

Output:

That’s for today

Enjoy and play !!

2 bytes team

Group : group link

Mobile phone- Kinan : 0994385748

Facebook account : kinan’s account

2 bytes team