Composition & Friend Class & Pointer to object

أنشِئ Class :

اسمه: Job

المتغيرات : role , salary , id .

 

أنشِئ Class :

اسمه: Person

المتغيرات : Job  object  وهي عبارة عن”Composition “has-a relationship.

يحوي : Print Salary function تقوم بطباعة الراتب بدون get function .

-أجعل Person Class friend لـ Job class .

في main function :

* أنشِئ  Job & Person وأطبع الـ Salary باستخدام Person Object .

-أكتب ترتيب مناداة الـ Destructors للـ objects بمعنى آخر أي الـ objects تم تدميره أولًا .

-قم بفصل الـ Class interface  في header file و Class implementation في cpp file

الحل:

//Job.h
#include <iostream>
#include <string>
using namespace std;
class Job
{
private:
 string role;
 float salary;
 int id;

public:
 Job();
 ~Job();//destructor 

 string getRole()const;
 void setRole(string Role);

 float getSalary()const;
 void setSalary(float Salary);

 int getId()const;
 void setId(int ID);

 friend class Person; //friend class
};
------------------------------------------------
//Job.cpp
#include "Job.h"

Job::Job(){ role = " "; salary = 0; id = 0; }
Job::~Job(){ cout << "Job has been destructed\n\n"; } //destructor 

string Job::getRole()const { return role; }
void Job::setRole(string Role){ role = Role; }

float Job::getSalary()const{ return salary;}
void Job::setSalary(float Salary) { salary = Salary; }

int Job::getId()const{ return id; }
void Job::setId(int ID) { id = ID; }
-----------------------------------------------
//Person.h
#include "Job.h" //Must Include
class Person {

private:
 Job job; //composition has-a relationship


public:
 Person(const Job& myjob); //Copy Constructor 
 ~Person(); //destructor 
 void printSalary();
};

--------------------------------------------------
//Person.cpp
#include "Person.h"

Person::Person(const Job & myjob)
{
 job.salary = myjob.salary; 
 job.id = myjob.id;
 job.role = myjob.role;
}

Person::~Person(){ cout << "\nPerson has been destructed\n"; }//destructor 

void Person::printSalary()
{
 //Person can access a private data member of job class because it's friend

 cout << "The Salary is: " <<job.salary <<endl;
}
---------------------------------------------
//Main.cpp
#include <iostream>
#include <string>
#include "Person.h"

using namespace std;

void main()
{
 Job job;

 job.setRole("maneger");
 job.setId(4333200);
 job.setSalary(30000);

 Person *person = new Person(job); //Pointer to Person object

 person->printSalary();

 delete person; //to trace the destructor operation 

 system("pause");
}

السطر 25 : طريقة الـ class friend .

السطر 48 : Object Data Member .

السطر 74 : يستطيع Person الوصول للـ Private Data Memeber لـ Job لأنه Friend بدون الحاجة للـ Get Function .

السطر 92  : طريقة إنشاء Pointer to object .

السطر 94 : طريقة مناداة الـ pointer للـ function عن طريق Arrow “->” بدل “.” 

Advertisements

تعريف Class يحوي Parameterized constructor وإنشاء الـ Objects

أكتب برنامج يحوي class اسمه Fraction (كسر ) ، هذا الـ class لديه  Two Data Members :

1.بسط    2. مقام ،

-أنشِئ هذا الـ class ، ثم في الـ main function :

1. عرّف كسرين    .

2.أعطي الكسر الأول قيمة 1/2 .

3.أطلب من المستخدم أن يعطي قيمة للكسر الثاني.

4.أطبع equal إذا كان الكسرين متساويين و not equal إذا لم يكونا متساويين.

*أجب على السؤال بإجابتين الأولى باستخدام Default constructor والأخرى باستخدام Parameterized constructor.

الحل الأول:

#include <iostream>
using namespace std;

//solution by default constructor
class Fraction
{
private:
 int numerator;
 int denominator;
public:

 //constructor and destructor
 Fraction(){ numerator = NULL; denominator = NULL; }
 ~Fraction(){}

 //set functions
 void setNumerator(int num){numerator = num;}
 void setDenominator(int num){denominator = num;}

 //Get functions
 int getNumerator(){return numerator;}
 int getDenominator(){return denominator;}

};

int main() {

 Fraction f1, f2;

//initialize the 1st fraction by set functions
 f1.setNumerator(1);
 f1.setDenominator(2);

//read the 2nd fraction value from the user and set the value by set functions
 int num;
 cout << "Enter a numerator: ";
 cin >> num;
 f2.setNumerator(num);
 cout << "Enter a denominator: ";
 cin >> num;
 f2.setDenominator(num);

//comparing by get functions
 if ((f1.getNumerator() == f2.getNumerator()) && (f1.getDenominator() == f2.getDenominator()))
 cout << " Equal" << endl;
 else
 cout << " Not equal" << endl;

 system("pause");
 return 0;
}

الحل الثاني:

#include <iostream>
using namespace std;

//solution by parameterized constructors
class Fraction
{
private:
 int numerator;
 int denominator;
public:

 //constructor and destructor
 Fraction(int num, int den){ numerator = num; denominator = den;}
 ~Fraction(){}

 //set functions
 void setNumerator(int num){numerator = num;}
 void setDenominator(int num){denominator = num;}

 //Get functions
 int getNumerator(){return numerator;}
 int getDenominator(){return denominator;}

};

int main() {
//initialize the 1st fraction by parameterized constructors
 Fraction f1(1, 2);

//read the 2nd fraction value from the user and set the value by parameterized constructors
 int num1, num2;
 cout << "Enter a numerator: ";
 cin >> num1;

 cout << "Enter a denominator: ";
 cin >> num2;

 Fraction f2(num1, num2);

//comparing by get functions
 if ((f1.getNumerator() == f2.getNumerator()) && (f1.getDenominator() == f2.getDenominator()))
 cout << " Equal" << endl;
 else
 cout << " Not equal" << endl;

 system("pause");
 return 0;
}