Esempi: Lezione 2

../_images/linea.png

2.0 Definizione della classe complesso

#ifndef complesso_h
#define complesso_h

class complesso
{
public: 
  complesso (double r, double i) ;
  complesso (const complesso & orig) ;
  ~complesso () ;

  double modulo () ;      
  double fase () ;    
  double parte_reale () const ;
  double parte_immaginaria () const ;

  void stampami () ; 

  complesso operator+ (const complesso & addendo) ;  
  complesso & operator= (const complesso & orig) ;  

private:
  double m_real ;
  double m_imag ;
} ;

complesso operator+ (const complesso & uno, const double & due) ;


#endif
../_images/linea.png

2.1 Implementazione della classe complesso

#include <cmath>
#include <iostream>
#include "complesso.h"


complesso::complesso (double r, double i):
  m_real (r),
  m_imag (i)
  {}

complesso::complesso (const complesso & orig):
  m_real (orig.m_real),
  m_imag (orig.m_imag)
  {}

complesso::~complesso () {}

double 
complesso::modulo ()
  {
    return sqrt (m_real * m_real + m_imag * m_imag) ;
  }

double 
complesso::parte_reale () const
{
  return m_real ;
}

double 
complesso::parte_immaginaria () const
{
  return m_imag ;
}

void
complesso::stampami ()
{
  std::cout << this->m_real << " + " << this->m_imag << "i" << std::endl ;
  return ;
}

complesso
complesso::operator+ (const complesso & addendo)
{
 complesso somma (m_real, m_imag) ;
 somma.m_real = somma.m_real + addendo.m_real ;
 somma.m_imag = somma.m_imag + addendo.m_imag ;
 return somma ;
}

complesso & 
complesso::operator= (const complesso & orig)
{
  m_real = orig.m_real ;
  m_imag = orig.m_imag ;
  return *this ;
}  

complesso operator+ (const complesso & uno, const double & due)
  {
    double real = uno.parte_reale () + due ;
    double imag = uno.parte_immaginaria () ;
    complesso somma (real, imag) ;
    return somma ;
  }
../_images/linea.png

2.2 Primo test della classe complesso

/*
c++ -o main_00 complesso.cc main_00.cpp
*/

#include <iostream>
#include <cmath>
#include "complesso.h"

int main (int argc, char ** argv)
{
  // test del constructor
  complesso numero_complesso_1 (0., 0.) ;
  complesso numero_complesso_2 (3., 4.) ;

  std::cout << numero_complesso_1.modulo () << std::endl ;
  std::cout << numero_complesso_2.modulo () << std::endl ;

  // test del copy constructor
  complesso numero_complesso_3 (numero_complesso_2) ;

  // test dell'operator+
  complesso numero_complesso_4 = numero_complesso_3 + numero_complesso_2 ;
//  complesso numero_complesso_4 = numero_complesso_3.operator+ (numero_complesso_2) ;
  numero_complesso_4.stampami () ;

  // test dell'operator=
  complesso numero_complesso_5 = numero_complesso_4 + 5. ;
  numero_complesso_5.stampami () ;

  complesso numero_complesso_6 = numero_complesso_5 = numero_complesso_2 ;
  numero_complesso_5.stampami () ;
  numero_complesso_6.stampami () ;

  return 0 ;
}
../_images/linea.png

2.3 Uso di const con tipi predefiniti

/*
c++ -o main_01 complesso.cc main_01.cpp
*/

#include <iostream>

int main (int argc, char ** argv)
{
  const int C1 = 10 ;
  int const C1_1 = 10 ;
  const int * C2 ;
  int const * C2_2 ;
  int numero = 3 ;
  int * const C3 (& numero) ;
  int const * const C4 (& C1) ;

  return 0 ;
}