ahmed.o.mohamed

اختبر قدراتك في C/CPP - الحلقة الرابعة, الجزء الثامن

3 ردود في هذا الموضوع

السلام عليكم

الحلقة الأولى.

الحلقة الثانية - الجزء الأول.

الحلقة الثانية - الجزء الثاني.

الحلقة الثانية - الجزء الثالث.

الحلقة الثانية - الجزء الرابع.

الحلقة الثانية - الجزء الخامس.

الحلقة الثانية - الجزء السادس و الأخير.

الحلقة الثالثة - الجزء الأول.

الحلقة الثالثة - الجزء الثاني.

الحلقة الثالثة - الجزء الثالث.

الحلقة الثالثة - الجزء الرابع.

الحلقة الثالثة - الجزء الخامس و الأخير.

الحلقة الرابعة - الجزء الأول.

الحلقة الرابعة - الجزء الثاني.

الحلقة الرابعة - الجزء الثالث.

الحلقة الرابعة - الجزء الرابع.

الحلقة الرابعة - الجزء الخامس.

الحلقة الرابعة - الجزء السادس.

الحلقة الرابعة - الجزء السابع.

مرحبا بكم إخوتي الكرام في الجزء الثامن من الحلقة الرابعة من سلسلة اختبر قدراتك, قمتُ بتقسيم الحلقة الرابعة إلى عدة أجزاء, مُرتبة حسب الصعوبة.

أجزاء هذه الحلقة ستكون خاصة بمسائل الــ OOP.

الإختبار الرابع (الجزء الثامن) :

الفئة vect تسمح بمعالجة متجهات ديناميكية (dynamic vectors) من الأعداد الصحيحة, تم الإعلان عن هذه الفئة في ملف vect.h كالتالي :

class vect {
protected: // en prévision d'une éventuelle classe dérivée
int nelem; // nombre d'éléments
int * adr; // adresse zone dynamique contenant les éléments
public:
vect(int); // constructeur
~vect(); // destructeur
int & operator [] (int); // accès à un élément par son "indice"
};

نفترض أن دالة البناء تحجز حجم المتجهات بشكل مناسب, و المؤثر [] يمكن استخدامه إما في عبارة أو على يسار مؤثر الإسناد.

من ناحية أخرى, هذه الفئة لا تحتوي على copy constructor, أيضا لم تتم إعادة تعريف مؤثر الإسناد و بالتالي نجد أن إسناد أو إرسال بيانات من نوع vect يطرح "المشاكل الشائعة".

قم بإنشاء فئة باسم vectok مشتقة من vect, تدعم إسناد و إرسال بيانات من نوع vectok بشكل مناسب.

لتسهيل استخدام الفئة الجديدة, قم بإنشاء دالة عضو تُعيد حجم متجه محدد.

اكتب برنامج رئيسي للتأكد.

سأضع حل السؤال بعد إنتهاء عرض المحاولات.

0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه

اشعر أني لم أفهم المطلوب جيدا, على العموم القي نظرة على هذا الكود و اذا كان بعيدا كل البعد عن المطلوب, فاشرح اكثر

#include<iostream>
#include<windows.h>
#include<conio.h>
using namespace std;

class vect {
protected:
int nelem;
int * adr;
public:
vect(){
nelem=0;
adr=NULL;
};
~vect(){};
int & operator [] (int);
};

class vectok : vect{
public:
vectok(int size){
nelem=size;
adr=new int[size];
};
vectok(vectok &v){
nelem=v.getSize();
adr=new int[nelem];
};
~vectok(){
if(adr)
delete[] adr;
};
int & operator [] (int);
int getSize(){return nelem;};
};

int main() {
vectok v(12);
vectok v1 = v;
cout<<v1.getSize();
return 0;
}

المخرجات:

12

0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه

محاولتك جيدة أخي ياسين :)

و هذه محاولتي :

vectok.h

class vectok : public vect {
public:

vectok(int dim) : vect(dim) {
}

vectok (vectok & v) : vect(v.nelem) {
int i;
for (i = 0; i < nelem; i++) adr[i] = v.adr[i];
}

vectok & operator =(vectok & v) {
if (this != &v) {
delete adr;
adr = new int [nelem = v.nelem];
int i;
for (i = 0; i < nelem; i++) adr[i] = v.adr[i];
}
return (*this);
}

int taille() {
return nelem;
}
};

Main.cpp

#include <iostream>
#include "vectok.h"
using namespace std;

int main() {
void fct(vectok);
vectok v(6);
int i;

for (i = 0; i < v.taille(); i++) v[i] = i;
cout << "vecteur v : ";
for (i = 0; i < v.taille(); i++) cout << v[i] << " ";
cout << endl;

vectok w(3);
w = v;
cout << "vecteur w : ";
for (i = 0; i < w.taille(); i++) cout << w[i] << " ";

cout << endl;
fct(v);

return 0;
}

void fct(vectok v) {
cout << "vecteur reçu par fct : " << endl;
int i;
for (i = 0; i < v.taille(); i++) cout << v[i] << " ";
}

تم منح النقاط للمشاركات المفيدة.

يُغلق.

أراكم في الجزء التاسع من الحلقة الرابعة.

0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه
زوار
This topic is now closed to further replies.

  • يستعرض القسم حالياً   0 members

    لا يوجد أعضاء مسجلين يشاهدون هذه الصفحة .