Inheritance الوراثة

أنشِئ Class :

اسمه: publication

المتغيرات : title , price

يحوي :  Parameterized constructor  و  default constructor و دالة تقرأ من المستخدم  البيانات للمتغيرات  وتخزنها و أخيرًا دالة طباعة.

هذا الـ Class  هو Base Class  ، والتالية هي  Derived Classes  : “مفهوم الوراثة “

الـ Class الأول  :

اسمه: Book 

المتغيرات : Pagecount

يحوي :  Parameterized constructor يقوم بعمل initialize لـ Data Member متضمنة الـ Data Member للـ Base Class  و دالة تقرأ من المستخدم  البيانات للمتغيرات وتخزنها و أخيرًا دالة طباعة.

 

الـ Class الثاني :

اسمه: Tape

المتغيرات : PlayingTinM “Playing Time in minute” .

يحوي :  Parameterized constructor يقوم بعمل initialize لـ Data Member متضمنة الـ Data Member للـ Base Class  و دالة تقرأ من المستخدم  البيانات للمتغيرات وتخزنها و أخيرًا دالة طباعة.

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

الحل: 

//publication.h

#include <iostream>
#include <string>
using namespace std;

#ifndef CLASS_PUBLICATION
#define CLASS_PUBLICATION

class publication
{
private:
 string title;
 float price;
public:

 publication();
 publication(string t, float p);
 void getdata();
 void putdata() const;
};

#endif
--------------------------------------------------
//publication.cpp
#include <iostream>
#include <string>
#include "publication.h"
using namespace std;

publication::publication(){ title = ""; price = 0; }
publication::publication(string t, float p){ title = t; price = p; }

void publication::getdata()
{
 cout << "Enter title:"; cin >> title;
 cout << "Enter price: "; cin >> price;
}
void publication::putdata() const
{
 cout << "\nTitle: " << title;
 cout << "\nPrice: " << price << endl;
}
-----------------------------------------------
//book.h
#include <iostream>
#include <string>
#include "publication.h"
using namespace std;


class Book :public publication
{
 int PageCount;
public:
 Book(int, float, string);
 void getdata();
 void putdata()const;

};
----------------------------------
//book.cpp
#include <iostream>
#include <string>
#include "publication.h"
#include "Book.h"
using namespace std;


Book::Book(int Pg, float Price, string T) :PageCount(Pg), publication(T, Price){}
void Book::getdata()
{
 publication::getdata();
 cout << "Enter the Page number: "; cin >> PageCount;
}
void Book::putdata()const
{
 cout << "Page Count: " << PageCount << endl << endl;
}
------------------------------------
//tape.h
#include <iostream>
#include <string>
#include "publication.h"
using namespace std;


class Tape : public publication
{
 float PlayingTinM;
public:
 Tape(float, float, string);
 void getdata();
 void putdata()const;
};
----------------------------------------
//tape.cpp
#include <iostream>
#include <string>
#include "publication.h"
#include "Tape.h"
using namespace std;

Tape::Tape(float PTIM, float Price, string T) :PlayingTinM(PTIM), publication(T, Price){}

void Tape::getdata()
{
 publication::getdata();
 cout << "Enter the Playing Time in miunte: "; cin >> PlayingTinM;
}
void Tape::putdata()const
{
 cout << "the Playing Time in miunte: " << PlayingTinM << endl;
}

 

السطر 7 و 8 و 23 : هذا الـ Directive هو حل لهذا الخطأ

 Error 1 error C2011: ‘publication’ : ‘class’ type redefinition c:\users\amjad\documents\visual studio 2013\projects\myblog\myblog\publication.h 7 1 myBlog

السطر 52 و 88 : طريقة الوراثة بكتابة نوع الوراثة ثم اسم الـ Base Class

السطر 70  و 104 : طريقة عمل initialize لمتغيرات الـ Base Class عن طريق مناداة الـ Constructor للـ Base Class

Advertisements

عملية الرفع إلى قوة باستخدام Recursion

-أكتب recursive function تستقبل عددين صحيحين الأول هو “الأساس base” والثاني هو “الأس power” ثم تقوم بحساب عملية الرفع إلى قوة وتعمل return للنتيجة .

الحل:

#include <iostream>
using namespace std;

int power(int b, int p); //recursive function prototype

void main()
{
 int b , p;

 cout << "Enter two numbers ";
 cin >> b >> p;
 cout <<b<<"^"<<p<<" = "<< power(b, p) << endl;

 system("pause");
}

int power(int b, int p)
{
 if (p == 1) return b;
 else return b*power(b, p - 1);
}

 

الرفع إلى قوة

-أكتب دالة تستقبل عددين صحيحين موجبين ، الأول يكون “الأساس base ” والثاني يكون “الأس power” ، ثم تقوم بحساب عملية الرفع إلى قوة وتعمل return للنتيجة .

-استخدم هذا الـ prototype :

(int calculate_power ( int x, int y

الحل:

مفهوم الرفع إلى قوة هو أن الأساس يُضرب بعدد مرّات الأس ، مثال : 3^2= 2×2×2.

#include <iostream>
using namespace std;

int calculate_power(int, int);
int main()
{
 int base, power, result;
 cout << "Enter a positive number as a base : ";
 cin >> base; cout << endl;
 cout << "Enter a positive number as a power : ";
 cin >> power; cout << endl;
 if (base >= 0 && power >= 0)
 {
 result = calculate_power(base, power);
 cout << base <<" ^ "<<power<<" = " << result << endl;
 }

 else cout << "invalid input\n";

 system("pause");
 return 0;
}

int calculate_power(int x, int y)
{
 int result = 1;
 for (int i = y; i > 0; i--)
 result *= x;

 return result;
}

السطر 26: تم عمل initialize بالواحد للمتغيّر الذي سيتم فيه تخزين نتيجة الضرب ، وهي نقطة مهمه ونسيانها قد يسبب logic error لأن البرنامج يقوم بالضرب في garbage موجودة مسبقًا في المتغيّر .

في حالة كانت العملية  جمع الـ initialize للمتغير يكون بالصفر . 

السطر 27 : في حالة كان الأس “y” يساوي صفر فإن النتيجة يجب أن تكون واحد ، لأن أي عدد أس صفر = 1 لذلك :

 لن يتم تنفيذ الـ for loop في حالة كان الأس “y” يساوي الصفر .