الفريق العربي للبرمجةأرشيف المنتديات · 2000 – 2023
نسخة أرشيفية للقراءة فقط — التسجيل والمشاركة مغلقان، والمحتوى محفوظ كما كان.

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

مغلق
بدأه Snack3r في 13 سبتمبر 2012 · 2 رد · 552 مشاهدة · في اختبر قداراتك
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

السلام عليكم

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

أجزاء هذه الحلقة ستكون خاصة بمسائل الــ 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 بشكل مناسب.

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

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

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

#2

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

#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

[سبحان الله و بحمده, سبحان الله العظيم]

#3

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

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

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 = v.adr;
    }

    vectok & operator =(vectok & v) {
        if (this != &v) {
            delete adr;
            adr = new int [nelem = v.nelem];
            int i;
            for (i = 0; i < nelem; i++) adr = v.adr;
        }
        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;
    cout << "vecteur v : ";
    for (i = 0; i < v.taille(); i++) cout << v << " ";
    cout << endl;

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

    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 << " ";
}

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

يُغلق.

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

هذا الموضوع مغلق.

مواضيع مشابهة