Forum - C/C++
- Libro paga elettronico , problema in file implementazione
Pagine: [ 1 2 3 ]
|
Birkhoff92 (Normal User)
Rookie
Messaggi: 31
Iscritto: 27/03/2014
Salve, ho modificato un piccolo programma che c'era sul libro per vedere se avevo capito i concetti del polimorfismo , ereditarietà etc , solo che nel file di implementazione di BasePlusCommissionEmployee.cpp alla voce BasePlusCommissionEmployee(const string &first etc etc) 'Out of line definiton of BasePlusCommissionEmployee does not match any declaration in BasePlusCommissionEmployee...' .
Il codice è il seguente :
Employee.h
Codice sorgente - presumibilmente C#
//
// Employee.h
// libro paga elettronico
//
// Created by Raffaele Sanseverino on 24/10/16.
// Copyright © 2016 Raffaele Sanseverino. All rights reserved.
//
#ifndef Employee_h
#define Employee_h
#include <string>
using namespace std ;
class Employee
{
public :
Employee( const string & ,const string & ,const string & ) ;
void setFirstName( const string & ) ; //imposta il nome
string getFirstName( ) const; //restituisce il nome
void setLastName( const string & ) ;
string getLastName( ) const;
void setSocialSecurityNumber ( const string & ) ; //imposta il numero di pos. INPS
string getSocialSecurityNumber( ) const;
//funzione virtuale pura che rende Employee astratta
virtual double earnings( ) const = 0 ;
virtual void print( ) const;
private :
string firstName;
string lastName;
string socialSecurityNumber;
} ;
#endif /* Employee_h */
Employee.cpp
Codice sorgente - presumibilmente C#
#include "Employee.h"
#include <iostream>
Employee:: Employee ( const string & first,const string & last, const string & ssn)
: firstName( first) , lastName( last) ,socialSecurityNumber( ssn)
{
}
void Employee:: setFirstName ( const string & first)
{
firstName= first;
}
string Employee:: getFirstName ( ) const
{
return firstName;
}
void Employee:: setLastName ( const string & last)
{
lastName= last;
}
string Employee:: getLastName ( ) const
{
return lastName;
}
void Employee:: setSocialSecurityNumber ( const string & ssn)
{
socialSecurityNumber= ssn;
}
string Employee:: getSocialSecurityNumber ( ) const
{
return socialSecurityNumber;
}
void Employee:: print ( ) const
{
cout<< getFirstName( ) << ' ' << getLastName( )
<< "\n social security number: " << getSocialSecurityNumber( ) ;
}
SalariedEmployee.h
Codice sorgente - presumibilmente C#
#ifndef SalariedEmployee_h
#define SalariedEmployee_h
#include "Employee.h"
class SalariedEmployee: public Employee
{
public :
SalariedEmployee( const string & , const string & ,const string & , double = 0.0) ;
void setWeeklySalary( double ) ;
double getWeeklySalary( ) const;
virtual double earnings( ) const;
virtual void print( ) const;
private :
double weeklySalary;
} ;
#endif /* SalariedEmployee_h */
SalariedEmployee.cpp
Codice sorgente - presumibilmente C#
#include <iostream>
using namespace std ;
#include "SalariedEmployee.h"
SalariedEmployee:: SalariedEmployee ( const string & first, const string & last, const string & ssn, double salary)
: Employee( first,last,ssn)
{
setWeeklySalary( salary) ;
}
//imposta il fisso settimanale
void SalariedEmployee:: setWeeklySalary ( double salary)
{
weeklySalary= ( salary < 0.0) ? 0.0: salary;
}
double SalariedEmployee:: getWeeklySalary ( ) const
{
return weeklySalary;
}
//calcola la retribuzione
double SalariedEmployee:: earnings ( ) const
{
return getWeeklySalary( ) ;
}
//visualizza le informazioni del dipendente
void SalariedEmployee:: print ( ) const
{
cout<< " salaried employee: " ;
Employee:: print ( ) ;
cout<< "\n weekly salary: " << getWeeklySalary( ) ;
}
HourlyEmployee.h
Codice sorgente - presumibilmente C#
#ifndef HourlyEmployee_h
#define HourlyEmployee_h
#include "Employee.h"
class HourlyEmployee: public Employee
{
public :
HourlyEmployee( const string & , const string & , const string & ,double = 0.0,double = 0.0) ;
void setWage( double ) ;
double getWage( ) const;
void setHours( double ) ;
double getHours( ) const;
virtual double earnings( ) const;
virtual void print( ) const;
private :
double wage;
double hours;
} ;
#endif /* HourlyEmployee_h */
HourlyEmployee.cpp
Codice sorgente - presumibilmente C#
#include <iostream>
using namespace std ;
#include "HourlyEmployee.h"
HourlyEmployee:: HourlyEmployee ( const string & first, const string & last, const string & ssn, double hourlyWage, double hoursWorked) : Employee( first,last,ssn)
{
setWage( hourlyWage) ;
setHours( hoursWorked) ;
}
void HourlyEmployee:: setWage ( double hourlyWage)
{
wage = ( hourlyWage < 0.0 ? 0.0: hourlyWage) ;
}
double HourlyEmployee:: getWage ( ) const
{
return wage;
}
void HourlyEmployee:: setHours ( double hoursWorked)
{
hours= ( ( ( hoursWorked >= 0.0 ) && ( hoursWorked <= 168.0 ) ) ? hoursWorked: 0.0) ;
}
double HourlyEmployee:: getHours ( ) const
{
return hours;
}
double HourlyEmployee:: earnings ( ) const
{
if ( getHours( ) <= 40 ) //nessuno straordinario ( devono essere almeno 41 ore)
return getWage( ) * getHours( ) ;
else
return 40* getWage( ) + ( ( getHours( ) - 40 ) * getWage( ) * 1.5) ;
}
void HourlyEmployee:: print ( ) const
{
cout<< " hourly employe : " ;
Employee:: print ( ) ;
cout<< "\n hourly wage : " << getWage( ) <<
"; hours worked : " << getHours( ) ;
}
CommissionEmployee.h
Codice sorgente - presumibilmente C#
#ifndef CommissionEmployee_h
#define CommissionEmployee_h
#include "Employee.h"
class CommissionEmployee: public Employee
{
public :
CommissionEmployee( const string & , const string & , const string & , double = 0.0,double = 0.0) ;
void setCommissionRate( double ) ;
double getCommissionRate( ) const;
void setGrossSales( double ) ;
double getGrossSales( ) const;
virtual double earnings( ) const;
virtual void print( ) const;
private :
double grossSales;
double commissionRate;
} ;
#endif /* CommissionEmployee_h */
CommissionEmployee.cpp
Codice sorgente - presumibilmente C#
#include <iostream>
using namespace std ;
#include "CommissionEmployee.h"
CommissionEmployee:: CommissionEmployee ( const string & first, const string & last, const string & ssn,double sales, double rate)
: Employee( first,last,ssn)
{
setGrossSales( sales) ;
setCommissionRate( rate) ;
}
void CommissionEmployee:: setCommissionRate ( < #double#>rate)
{
commissionRate= ( ( rate > 0.0 && rate < 1.0) ? rate: 0.0) ;
}
double CommissionEmployee:: getCommissionRate ( ) const
{
return commissionRate;
}
void CommissionEmployee:: setGrossSales ( double sales)
{
grossSales= ( ( sales < 0.0) ? 0.0: sales) ;
}
double CommissionEmployee:: getGrossSales ( ) const
{
return grossSales;
}
double CommissionEmployee:: earnings ( ) const
{
return getCommissionRate( ) * getGrossSales( ) ;
}
void CommissionEmployee:: print ( ) const
{
cout<< "commission employee :" ;
Employee:: print ( ) ;
cout<< "\n gross sales: " << getGrossSales( )
<< " ; commission rate: " << getCommissionRate( ) ;
}
BasePlusCommissionEmployee.h
Codice sorgente - presumibilmente C#
#ifndef BasePlusCommissionEmployee_h
#define BasePlusCommissionEmployee_h
#include "CommissionEmployee.h"
class BasePlusCommissionEmployee: public CommissionEmployee
{
public :
BasePlusCommissionEmployee( const string & , const string & , const string & , double = 0.0,double = 0.0) ;
void setBaseSalary( double ) ;
double getBaseSalary( ) const;
virtual double earnings( ) const;
virtual void print( ) const;
private :
double baseSalary;
} ;
#endif /* BasePlusCommissionEmployee_h */
BasePlusCommissionEmployee.cpp
Codice sorgente - presumibilmente C#
#include <iostream>
using namespace std ;
#include "BasePlusCommissionEmployee.h"
BasePlusCommissionEmployee:: BasePlusCommissionEmployee ( const string & first, const string & last, const string & ssn,double sales, double rate,double salary)
: CommissionEmployee( first,last,ssn,sales,rate)
{
setBaseSalary( salary) ;
}
void BasePlusCommissionEmployee:: setBaseSalary ( double salary)
{
baseSalary= ( ( salary < 0.0) ? 0.0: salary) ;
}
double BasePlusCommissionEmployee:: getBaseSalary ( ) const
{
return baseSalary;
}
double BasePlusCommissionEmployee:: earnings ( ) const
{
return getBaseSalary( ) + CommissionEmployee:: earnings ( ) ;
}
void BasePlusCommissionEmployee:: print ( ) const
{
cout<< "base salaried : " ;
CommissionEmployee:: print ( ) ;
cout<< "; base salary: " << getBaseSalary( ) ;
}
main.cpp
Codice sorgente - presumibilmente C++
#include <iostream>
using namespace std;
#include <iomanip>
using std:: setprecision ;
#include <vector>
using std:: vector ;
#include "Employee.h"
#include "SalariedEmployee.h"
#include "HourlyEmployee.h"
#include "CommissionEmployee.h"
#include "BasePlusCommissionEmployee.h"
void virtualViaPointer( const Employee * const ) ;
void virtualViaReference( const Employee & ) ;
int main( int argc, const char * argv[ ] )
{
//imposto il valore per formato con virgola
cout << fixed<< setprecision( 2) ;
//creo oggetti delle classi derivate
SalariedEmployee salariedEmployee(
"Raffaele" , "Sanseverino" ,"111-12-1212" ,800 ) ;
HourlyEmployee hourlyEmployee( "Mario" ,"Esposito" , "222-22-2234" ,16.75,40) ;
CommissionEmployee commissionEmployee ( "Sue" ,"Jones" ,"333-33-3335" ,1000.06) ;
BasePlusCommissionEmployee basePlusCommissionEmployee( "Pietro" ,"Volente" ,"444-44-4547" ,5000.04,300) ;
cout << "Employees processed individually using static binding:\n \n " ;
salariedEmployee.print ( ) ;
cout << "\n earned € " << salariedEmployee.earnings ( ) << "\n \n " ;
hourlyEmployee.print ( ) ;
cout << "\n earned " << hourlyEmployee.earnings ( ) << "\n \n " ;
commissionEmployee.print ( ) ;
cout << "\n earned " << commissionEmployee.earnings ( ) << "\n \n " ;
basePlusCommissionEmployee.print ( ) ;
cout << "\n earned " << basePlusCommissionEmployee.earnings ( ) << "\n \n " ;
vector < Employee * > employees( 4) ;
employees[ 0] = & salariedEmployee;
employees[ 1] = & hourlyEmployee;
employees[ 2] = & commissionEmployee;
employees[ 3] = & basePlusCommissionEmployee;
cout << "Employees processed polymophically via dynamic binding :\n \n " ;
cout << " Virtual function calls made off base-class pointers:\n \n " ;
for ( size_t i= 0 ; i< employees.size ( ) ; i++ )
virtualViaPointer( employees[ i] ) ;
cout << "Virtual function calls made off base-class reference:\n \n " ;
for ( size_t i= 0 ; i< employees.size ( ) ; i++ )
virtualViaReference( * employees[ i] ) ;
return 0 ;
}
void virtualViaPointer( const Employee * const baseClassPtr)
{
baseClassPtr- > print( ) ;
cout << "\earned € " << baseClassPtr- > earnings( ) << "\n \n " ;
}
void virtualViaReference( const Employee & baseClassRef)
{
baseClassRef.print ( ) ;
cout << "\n earned € " << baseClassRef.earnings ( ) << "\n \n " ;
}
Se qualcuno mi aiutasse a capirne il motivo , grazie
Birkhoff92 (Normal User)
Rookie
Messaggi: 31
Iscritto: 27/03/2014
mi da anche quest altro errore :/
nessuno (Normal User)
Guru^2
Messaggi: 6380
Iscritto: 03/01/2010
Hai confrontato bene queste due parti
BasePlusCommissionEmployee(const string &, const string &, const string &, double=0.0,double=0.0)
BasePlusCommissionEmployee::BasePlusCommissionEmployee(const string &first, const string &last, const string &ssn,double sales, double rate,double salary)
come ha fatto il compilatore?
Ultima modifica effettuata da nessuno il 25/10/2016 alle 10:22
Ricorda che nessuno è obbligato a risponderti e che nessuno è perfetto ...
---
Il grande studioso italiano Bruno de Finetti (uno dei padri fondatori del moderno Calcolo delle probabilità) chiamava il gioco del Lotto Tassa sulla stupidità.
Birkhoff92 (Normal User)
Rookie
Messaggi: 31
Iscritto: 27/03/2014
ci manca un double=0.0 ? :/ sul libro non lo portava per questo
nessuno (Normal User)
Guru^2
Messaggi: 6380
Iscritto: 03/01/2010
Quale libro? Sicuro?
Ricorda che nessuno è obbligato a risponderti e che nessuno è perfetto ...
---
Il grande studioso italiano Bruno de Finetti (uno dei padri fondatori del moderno Calcolo delle probabilità) chiamava il gioco del Lotto Tassa sulla stupidità.
Birkhoff92 (Normal User)
Rookie
Messaggi: 31
Iscritto: 27/03/2014
Deitel & Deitel Fondamenti di programmazione c++. Ho provato a mettere pure il terzo double ma niente
Ultima modifica effettuata da Birkhoff92 il 25/10/2016 alle 16:13
nessuno (Normal User)
Guru^2
Messaggi: 6380
Iscritto: 03/01/2010
Quale pagina?
"Niente" cosa vuol dire? Hai lo stesso errore? E qual è adesso il codice?
Ultima modifica effettuata da nessuno il 25/10/2016 alle 16:14
Ricorda che nessuno è obbligato a risponderti e che nessuno è perfetto ...
---
Il grande studioso italiano Bruno de Finetti (uno dei padri fondatori del moderno Calcolo delle probabilità) chiamava il gioco del Lotto Tassa sulla stupidità.
Birkhoff92 (Normal User)
Rookie
Messaggi: 31
Iscritto: 27/03/2014
pagina 706 figura 13.19. Si stesso identico errore
nessuno (Normal User)
Guru^2
Messaggi: 6380
Iscritto: 03/01/2010
Non riesco a vedere quella pagina ma su internet ho visto altre pagine del libro dove ci sono i 3 double. In ogni caso, se hai corretto non puoi avere lo stesso errore. O hai un altro errore o non hai salvato le correzioni.
Ricorda che nessuno è obbligato a risponderti e che nessuno è perfetto ...
---
Il grande studioso italiano Bruno de Finetti (uno dei padri fondatori del moderno Calcolo delle probabilità) chiamava il gioco del Lotto Tassa sulla stupidità.