Pointer data member

أنشِئ Class :

اسمه:  Fraction

المتغيرات : *numerator و  denominator

:يحوي   Parameterized constructor  و Copy constructor و Default constructor

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

لهدف من السؤال هو كيفية التعامل مع الـ pointer في constructors , destructor , set & get  .

الحل:

//.h
class Fraction
{
 int *numerator; //pointer data member
 int denominator;

public:

 Fraction(); //Default constructor
 Fraction(int, int);//Parameterized constructor 
 Fraction(const Fraction &);// Copy constructor 
 ~Fraction();//destructor

 void setNumerator(int);
 void setDenominator(int);

 int getDenominator();
 int getNumerator();

};
------------------------------------------------------
//.cpp
#include <iostream>
#include "Fraction.h"
using namespace std;

//Default constructor
Fraction::Fraction()
{
 numerator = new int; //allocate pointer
 if (!numerator) { cout << "Allocation failure"; exit(1); } //if not allocate
 //initialize
 setNumerator(1);
 setDenominator(1);
}

//Parameterized constructor
Fraction::Fraction(int N, int D)
{
 setNumerator(N); setDenominator(D);
}

//Copy constructor
Fraction::Fraction(const Fraction &obj)
{ numerator = new int; //allocate the pointer for the new object 
if (!numerator) { cout << "Allocation failure"; exit(1); } //if not allocte

//copy information
setNumerator(*obj.numerator); //use '*' to copy the value 
setDenominator(obj.denominator); }

//destructor
Fraction::~Fraction()
{ delete numerator; //delete pointer
}

void Fraction::setNumerator(int num)
{//use '*'
 *numerator = num; 
}
void Fraction::setDenominator(int num){ denominator = num; }

int Fraction::getDenominator(){ return denominator; }

int Fraction::getNumerator()
{ //use '*'
 return *numerator; 
}

Advertisements

مثال copy constructor و فصل interface عن implementation

أنشِئ Class :

اسمه:  Date 

المتغيرات : Day , Month , Year

الدوال الإضافية  : Display function “لطباعة التاريخ “

:يحوي   Parameterized constructor  و Copy constructor

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

 في Main funtion :

أطلب من المستخدم إدخال اليوم والشهر والسنة ثم أنشِئ object وأملأه بالمعلومات المُدخلة ، ثم أطبع التاريخ ، بعد ذلك أنشِئ object آخر يحمل نفس معلومات الـ object  الأول ثم أطبع التاريخ للـ object الثاني.

الحل:

//.h
class Date
{
 int Day, Month, Year;
public:
 Date(int, int, int); // Parameterized constructor
 Date(const Date &); //Copy constructor

 ~Date(); //destructor

//set functions
 void SetDay(int);
 void SetMonth(int);
 void SetYear(int);

//get functions
 int GetDay();
 int GetMonth();
 int GetYear();

//dispaly
 void Display();

};

-----------------------------------------------------
//.cpp
#include <iostream>
#include "Date.h"
using namespace std;

// Parameterized constructor
Date::Date(int D, int M, int Y){ SetDay(D); SetMonth(M); SetYear(Y); }

//Copy constructor
Date::Date(const Date &obj)
{
 SetDay(obj.Day); SetMonth(obj.Month); SetYear(obj.Year);
}

Date::~Date(){ }

void Date::SetDay(int D) { Day = D; }
void Date::SetMonth(int M){ Month = M; }
void Date::SetYear(int Y) { Year = Y; }

int Date::GetDay(){ return Day; }
int Date::GetMonth(){ return Month; }
int Date::GetYear(){ return Year; }

void Date::Display()
{
 cout << "The Date is is: " << GetDay() << "\\" << GetMonth() << "\\" << GetYear() << endl;
}
-------------------------------------------------------
//main
#include <iostream>
#include "Date.h" //must include
using namespace std;

void main()
{
 int Day, Month, Year;

 cout << "Ente the Day: "; cin >> Day;
 cout << "Ente the Month: "; cin >> Month;
 cout << "Ente the Year: "; cin >> Year;

//initialized by Parameterized constructor
 Date obj1(Day, Month, Year);
 obj1.Display();

//initialized by copy constructor
 Date obj2(obj1);
 obj2.Display();

 system("pause");
}

تعريف 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;
}