Allora credo sia solo un problema della versione 2015.
qua c'è tutto il progetto (header, cpp):
autore.h:
#pragma once
#include <iostream>
using namespace std;
class Autore
{
private:
string nome; // nome dell'autore del libro
string cognome; // cognome dell'autore del libro
public:
Autore ( ); // costruttore di default
Autore ( string&, string& ); // costruttore con parametri (nome e cognome)
~Autore ( ); // distruttore
// get
string& getNome ( void );
string& getCognome ( void );
friend ostream& operator<< ( ostream&, const Autore& );
friend istream& operator>> ( istream&, Autore& );
};
autore.cpp:
#include <iostream>
#include <string>
using namespace std;
#include "autore.h"
Autore::Autore ( )
{
nome = "";
cognome = "";
}
Autore::Autore ( string& nome, string& cognome )
{
this->nome = nome;
this->cognome = cognome;
}
Autore::~Autore ( )
{
cout << "Oggetto Autore rimosso dalla RAM." << endl;
}
string& Autore::getNome ( void )
{
return nome;
}
string& Autore::getCognome ( void )
{
return cognome;
}
ostream& operator<< ( ostream& output, const Autore& a )
{
output << a.nome.at(0) << ". " << a.cognome << ", ";
return output;
}
istream& operator>> ( istream& input, Autore& a )
{
cout << "Inserisci il nome dell'autore: ";
fflush(stdin);
getline ( input, a.nome );
cout << "Inserisci il cognome dell'autore: ";
fflush(stdin);
getline ( input, a.cognome );
return input;
}
libro.h:
#pragma once
#include "autore.h"
class Libro
{
private:
Autore autori[5];
string titolo, editore;
double prezzo;
public:
Libro();
Libro ( Autore*, string, string, double );
~Libro ( );
bool operator== ( const Libro& );
Libro& operator= (const Libro&);
friend istream& operator>> ( istream&, Libro& );
friend ostream& operator<< ( ostream&, Libro& );
friend Libro& sconta ( Libro&, const double );
};
libro.cpp:
#include <string>
#include "libro.h"
Libro::Libro()
{
titolo = "";
editore = "";
prezzo = 0;
}
Libro::Libro ( Autore* autori, string titolo, string editore, double prezzo )
{
for ( int i = 0; i < 5; i++ )
this->autori[i] = autori[i];
this->titolo = titolo;
this->editore = editore;
this->prezzo = prezzo;
}
Libro::~Libro ( )
{
cout << "Oggetto Libro rimosso dalla RAM." << endl;
}
Libro& Libro::operator= (const Libro& a)
{
for (int i = 0; i < 5; i++)
this->autori[i] = a.autori[i];
titolo = a.titolo;
editore = a.editore;
prezzo = a.prezzo;
return *this;
}
bool Libro::operator== (const Libro& a)
{
if (this->titolo == a.titolo)
return true;
else
return false;
}
ostream& operator<< (ostream& output, Libro& a)
{
for (int i = 0; i < 5; i++)
{
if (a.autori[i].getNome() != "" && a.autori[i].getCognome() != "")
output << a.autori[i];
}
output << " \"" << a.titolo << "\", ";
output << "ed. " << a.editore << ", ";
output << "€ " << a.prezzo << endl;
return output;
}
istream& operator>> (istream& input, Libro& a)
{
for (int i = 0; i < 5; i++)
{
fflush(stdin);
input >> a.autori[i];
}
cout << "Inserisci il titolo del libro: ";
fflush(stdin);
getline(input, a.titolo);
cout << "Inserisci l'editore del libro:";
fflush(stdin);
getline(input, a.editore);
cout << "Inserisci il prezzo del libro:";
fflush(stdin);
input >> a.prezzo;
return input;
}
Libro& sconta(Libro& a, const double sconto)
{
a.prezzo -= (a.prezzo * sconto / 100);
return a;
}