Programare Orientata pe Obiecte


Constructori si destructori

Sa se implementeze clasa Segment.

#include <conio.h>
#include <iostream>
using namespace std;
class Punct{
  private:
    float x;
    float y;
  public:
    Punct(float x = 0, float y = 0);
    ~Punct();
    void afisare();             
};

Punct::Punct(float x, float y) {
   this -> x = x;
   this -> y = y;
   cout << "Apel constructor cu parametri pentru clasa Punct("<<x<<","<<y<<")"<<endl;                                                        
}
Punct::~Punct(){
   cout << "Apel destructor clasa Punct. Se distruge obiectul Punct("<<x<<","<<y<<")" <<endl;                               
}
void Punct::afisare(){
  cout<<"("<<x<<","<<y<<")";   
}

class Segment{
      Punct o;
      Punct v;
   public:
      Segment (float x1, float y1, float x2, float y2);
      ~Segment();
      void afisare();      
};
Segment:: Segment(float x1, float y1, float x2, float y2) : o(x1 ,y1), v(x2,y2){
    cout << "Apel constructor clasa Segment" <<  endl;
    cout << "Creat obiectul ";
    afisare();          
}
Segment:: ~Segment(){
    cout << "Apel destructor clasa Segment" <<  endl;       
}
void Segment::afisare(){
    cout << "[" ; o.afisare(); cout << " , " ; v.afisare(); cout << "]" << endl;
} 

int main(){
    Segment s(0, 0, 3 ,4);
    s.afisare();
    getch();
    return 0;
}
                

In urma rularii programului se obtine urmatorul output:

Apel constructor cu parametri pentru clasa Punct(0,0)
Apel constructor cu parametri pentru clasa Punct(3,4)
Apel constructor clasa Segment
Creat obiectul [(0,0) , (3,4)]
[(0,0) , (3,4)]
Apel destructor clasa Segment
Apel destructor clasa Punct. Se distruge obiectul Punct(3,4)
Apel destructor clasa Punct. Se distruge obiectul Punct(0,0)  

Cerinte:

  1. Rulati programul si explicati rezultatul

  2. Adaugati la clasa Segment o functie pentru calculul lungimii

Sa se implementeze clasa Vector.

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

/**
 * Implementeaza notiunea de vector.
 */
class Vector {
    private:
        int n; //dimensiunea vectorului
        float *t; //pointer catre zona de memorie alocata dinamic unde se retin elementele vectorului
    public:
        /**
        * Constructor pentru clasa Vector.
        * @param n Dimensiunea vectorului
        */
        Vector(int n);
        
        /**
        * Constructor de copiere.
        * @param v Obiectul pe baza caruia se creaza noul obiect.
        */             
        Vector(const Vector &v); 
        
        /**
        * Destructor al clasei Vector.
        */  
        ~Vector();
        
        /**
        * Functie pentru citirea vectorului.
        */             
        void citire();
        
        /**
        * Functie pentru afisarea vectorului.
        */                          
        void afisare();
        
        /** Intoarce numarul de elemente */
        int getNrElemente() const;
        
        /**
        * Seteaza valoarea unui element al vectorului.
        * @param i Indexul elementului ce se va seta.
        * @param val Noua valoare a elementului.
        */             
        void setElement(int  i, float val);
        
        /**
        * Intoarce valoarea unui element al vectorului.
        * @param i Indexul elementului.
        * @return Valoarea elementului specificat.
        */             
        float getElement(int i) const;
};

 Vector::Vector(int n){
    int i;
    this->n = n;
    this->t = new float[n];            
    for (i = 0; i < n; i++){
        this->t[i] = 0;
    }  
    cout<<"Apel constructor cu parametri"<<endl;
 }
 Vector::Vector(const Vector &v){
    int i;
    this->n = v.n;
    this->t = new float[n];            
    for (i = 0; i < n; i++){
        this->t[i] =v.t[i];
    }  
    cout<<"Apel constructor de copiere"<<endl;
 }
 Vector::~Vector(){
   n = 0;                
   if (t!=0) delete t;
   cout<<"Apel destructor"<<endl;                                    
 }
                                
 void Vector::citire(){
      int i;
      cout<<"Dati elementle vectorului:"<<endl;
      for (i = 0; i < n; i++){
           cin >> t[i];
      }
 }
 void Vector::afisare() {
      int i;      
      for (i = 0; i < n; i++){
           cout<<t[i]<<" ";
      }
      cout<<endl;
 }
 
 int Vector::getNrElemente() const {
     return n;    
 }
 void Vector::setElement(int  i, float val) {
      if (i >= 0 && i < n){
            t[i] = val;
      }
 }
 float Vector::getElement(int i) const {
       return t[i];
 }
 
 float suma1(Vector v){
   float s = 0;
   for (int i = 0; i < v.getNrElemente() ; i++ )
     s+=v.getElement(i);
   return s;     
 }
 
  float suma2(Vector &v){
   float s = 0;
   for (int i = 0; i < v.getNrElemente() ; i++ )
     s+=v.getElement(i);
   return s;     
 }
 
Vector suma ( const Vector &v1, const Vector &v2 ){
    Vector s(v1.getNrElemente());
    for (int i = 0; i < s.getNrElemente() ; i++ )
       s.setElement(i, v1.getElement(i) +  v2.getElement(i));
    return s;    
 }

int main(){
     int n;
     Vector v1(2);
     v1.setElement(0,4);
     v1.setElement(1,9);
     v1.afisare();
     Vector v2 = v1;
     v2.afisare();
     v2.setElement(0,3);
     v2.afisare();
     v1.afisare();
     
     cout << "Suma elementelor este: " << suma1(v1) << endl;
     cout << "Suma elementelor este: " << suma2(v1) << endl;
     
     Vector v = suma(v1, v2);
     v.afisare();
     getch();
     return 0;
}

    
         

In urma rularii programului se obtine urmatorul output:

Apel constructor cu parametri
4 9 
Apel constructor de copiere
4 9 
3 9 
4 9 
Apel constructor de copiere
Apel destructor
Suma elementelor este: 13
Suma elementelor este: 13
Apel constructor cu parametri
Apel constructor de copiere
Apel destructor
7 18 
Apel destructor
Apel destructor
Apel destructor
        

Cerinte:

  1. Rulati programul si explicati rezultatul

  2. Eliminati constructorul de copiere, rulati programul si apoi explicati rezultatul.

Tema

  1. Implementati clasa PoligonConvex.

  2. Implementati clasa Matrice care sa reprezinte o matrice reprezentata sub forma liniara