Questo sito utilizza cookies solo per scopi di autenticazione sul sito e nient'altro. Nessuna informazione personale viene tracciata. Leggi l'informativa sui cookies.
Username: Password: oppure
C/C++ - Libro paga elettronico , problema in file implementazione
Forum - C/C++ - Libro paga elettronico , problema in file implementazione

Pagine: [ 1 2 3 ] Precedente | Prossimo
Avatar
Birkhoff92 (Normal User)
Rookie


Messaggi: 31
Iscritto: 27/03/2014

Segnala al moderatore
Postato alle 9:38
Martedì, 25/10/2016
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#

  1. //
  2. //  Employee.h
  3. //  libro paga elettronico
  4. //
  5. //  Created by Raffaele Sanseverino on 24/10/16.
  6. //  Copyright © 2016 Raffaele Sanseverino. All rights reserved.
  7. //
  8.  
  9. #ifndef Employee_h
  10. #define Employee_h
  11. #include <string>
  12. using namespace std;
  13. class Employee
  14. {
  15. public:
  16.     Employee(const string &,const string &,const string &);
  17.     void setFirstName(const string &); //imposta il nome
  18.     string getFirstName()const;//restituisce il nome
  19.     void setLastName(const string &);
  20.     string getLastName() const;
  21.     void setSocialSecurityNumber (const string &); //imposta il numero di pos. INPS
  22.     string getSocialSecurityNumber() const;
  23.     //funzione virtuale pura che rende Employee astratta
  24.     virtual double earnings() const =0;
  25.     virtual void print() const;
  26. private:
  27.     string firstName;
  28.     string lastName;
  29.     string socialSecurityNumber;
  30. };
  31.  
  32.  
  33. #endif /* Employee_h */


Employee.cpp
Codice sorgente - presumibilmente C#

  1. #include "Employee.h"
  2. #include <iostream>
  3. Employee::Employee(const string &first,const string &last, const string &ssn)
  4. :firstName(first), lastName(last),socialSecurityNumber(ssn)
  5. {
  6.  
  7. }
  8. void Employee::setFirstName(const string &first)
  9. {
  10.     firstName=first;
  11. }
  12.  
  13. string Employee::getFirstName() const
  14. {
  15.     return firstName;
  16. }
  17. void Employee::setLastName(const string &last)
  18. {
  19.     lastName=last;
  20. }
  21. string Employee::getLastName() const
  22. {
  23.     return lastName;
  24. }
  25. void Employee:: setSocialSecurityNumber(const string &ssn)
  26. {
  27.     socialSecurityNumber=ssn;
  28. }
  29. string Employee::getSocialSecurityNumber() const
  30. {
  31.     return socialSecurityNumber;
  32. }
  33. void Employee::print() const
  34. {
  35.     cout<<getFirstName()<<' '<<getLastName()
  36.     <<"\n social security number: "<<getSocialSecurityNumber();
  37. }


SalariedEmployee.h
Codice sorgente - presumibilmente C#

  1. #ifndef SalariedEmployee_h
  2. #define SalariedEmployee_h
  3.  
  4. #include "Employee.h"
  5.  
  6. class SalariedEmployee:public Employee
  7. {
  8. public:
  9.     SalariedEmployee(const string &, const string &,const string &, double=0.0);
  10.     void setWeeklySalary(double);
  11.     double getWeeklySalary() const;
  12.     virtual double earnings() const;
  13.     virtual void print() const;
  14. private:
  15.     double weeklySalary;
  16. };
  17.  
  18.  
  19. #endif /* SalariedEmployee_h */


SalariedEmployee.cpp
Codice sorgente - presumibilmente C#

  1. #include <iostream>
  2. using namespace std;
  3.  
  4. #include "SalariedEmployee.h"
  5.  
  6. SalariedEmployee::SalariedEmployee(const string &first, const string &last, const string &ssn, double salary)
  7. :Employee(first,last,ssn)
  8. {
  9.     setWeeklySalary(salary);
  10.    
  11. }
  12. //imposta il fisso settimanale
  13.  
  14. void SalariedEmployee::setWeeklySalary(double salary)
  15. {
  16.     weeklySalary= (salary <0.0) ? 0.0:salary;
  17. }
  18. double SalariedEmployee::getWeeklySalary() const
  19. {
  20.     return weeklySalary;
  21. }
  22. //calcola la retribuzione
  23. double SalariedEmployee::earnings() const
  24. {
  25.     return getWeeklySalary();
  26. }
  27. //visualizza le informazioni del dipendente
  28. void SalariedEmployee::print() const
  29. {
  30.    
  31.     cout<<" salaried employee: ";
  32.     Employee::print();
  33.     cout<<"\n weekly salary: "<<getWeeklySalary();
  34. }


HourlyEmployee.h
Codice sorgente - presumibilmente C#

  1. #ifndef HourlyEmployee_h
  2. #define HourlyEmployee_h
  3.  
  4. #include "Employee.h"
  5.  
  6. class HourlyEmployee:public Employee
  7. {
  8. public:
  9.     HourlyEmployee(const string &, const string &, const string &,double=0.0,double=0.0);
  10.     void setWage(double);
  11.     double getWage() const;
  12.     void setHours(double);
  13.     double getHours() const;
  14.     virtual double earnings() const;
  15.     virtual void print() const;
  16. private:
  17.     double wage;
  18.     double hours;
  19. };
  20.  
  21. #endif /* HourlyEmployee_h */


HourlyEmployee.cpp
Codice sorgente - presumibilmente C#

  1. #include <iostream>
  2. using namespace std;
  3.  
  4. #include "HourlyEmployee.h"
  5.  
  6. HourlyEmployee::HourlyEmployee(const string &first, const string &last, const string &ssn, double hourlyWage, double hoursWorked) : Employee(first,last,ssn)
  7. {
  8.     setWage(hourlyWage);
  9.     setHours(hoursWorked);
  10. }
  11.  
  12. void HourlyEmployee::setWage(double hourlyWage)
  13. {
  14.     wage = (hourlyWage <0.0 ?0.0: hourlyWage);
  15. }
  16. double HourlyEmployee::getWage() const
  17. {
  18.     return wage;
  19.    
  20. }
  21. void HourlyEmployee::setHours(double hoursWorked)
  22. {
  23.     hours=(((hoursWorked >= 0.0 ) && (hoursWorked <= 168.0 )) ? hoursWorked:0.0);
  24. }
  25.  
  26. double HourlyEmployee::getHours() const
  27. {
  28.     return hours;
  29. }
  30. double HourlyEmployee::earnings() const
  31. {
  32.     if (getHours() <= 40)  //nessuno straordinario ( devono essere almeno 41 ore)
  33.         return getWage() * getHours();
  34.     else
  35.         return 40* getWage() + ((getHours() -40 ) * getWage()*1.5);
  36. }
  37. void HourlyEmployee::print() const
  38. {
  39.     cout<<" hourly employe : ";
  40.     Employee::print();
  41.     cout<<"\n hourly wage : "<<getWage()<<
  42.     "; hours worked : "<<getHours();
  43. }


CommissionEmployee.h
Codice sorgente - presumibilmente C#

  1. #ifndef CommissionEmployee_h
  2. #define CommissionEmployee_h
  3.  
  4. #include "Employee.h"
  5.  
  6. class CommissionEmployee:public Employee
  7. {
  8. public:
  9.     CommissionEmployee(const string &, const string &, const string &, double =0.0,double=0.0);
  10.     void setCommissionRate(double);
  11.     double getCommissionRate() const;
  12.     void setGrossSales(double);
  13.     double getGrossSales() const;
  14.     virtual double earnings() const;
  15.     virtual void print() const;
  16. private:
  17.     double grossSales;
  18.     double commissionRate;
  19.    
  20. };
  21.  
  22.  
  23. #endif /* CommissionEmployee_h */


CommissionEmployee.cpp
Codice sorgente - presumibilmente C#

  1. #include <iostream>
  2. using namespace std;
  3.  
  4. #include "CommissionEmployee.h"
  5.  
  6. CommissionEmployee::CommissionEmployee(const string &first, const string &last, const string &ssn,double sales, double rate)
  7. :Employee(first,last,ssn)
  8. {
  9.     setGrossSales(sales);
  10.     setCommissionRate(rate);
  11. }
  12.  
  13. void CommissionEmployee::setCommissionRate(<#double#>rate)
  14. {
  15.     commissionRate=((rate >0.0 && rate <1.0) ? rate: 0.0);
  16. }
  17.  
  18. double CommissionEmployee::getCommissionRate() const
  19. {
  20.     return commissionRate;
  21. }
  22.  
  23. void CommissionEmployee::setGrossSales(double sales)
  24. {
  25.     grossSales=((sales <0.0)?0.0:sales);
  26. }
  27. double CommissionEmployee::getGrossSales() const
  28. {
  29.     return grossSales;
  30. }
  31. double CommissionEmployee::earnings() const
  32. {
  33.     return getCommissionRate() * getGrossSales();
  34. }
  35. void CommissionEmployee::print() const
  36. {
  37.         cout<<"commission employee :";
  38.     Employee::print();
  39.     cout<<"\n gross sales: "<<getGrossSales()
  40.     <<" ; commission rate: "<<getCommissionRate();
  41. }


BasePlusCommissionEmployee.h
Codice sorgente - presumibilmente C#

  1. #ifndef BasePlusCommissionEmployee_h
  2. #define BasePlusCommissionEmployee_h
  3.  
  4. #include "CommissionEmployee.h"
  5.  
  6. class BasePlusCommissionEmployee: public CommissionEmployee
  7. {
  8. public:
  9.     BasePlusCommissionEmployee(const string &, const string &, const string &, double=0.0,double=0.0);
  10.     void setBaseSalary(double);
  11.     double getBaseSalary() const;
  12.     virtual double earnings() const;
  13.     virtual void print() const;
  14. private:
  15.     double baseSalary;
  16. };
  17.  
  18.  
  19. #endif /* BasePlusCommissionEmployee_h */


BasePlusCommissionEmployee.cpp
Codice sorgente - presumibilmente C#

  1. #include <iostream>
  2. using namespace std;
  3. #include "BasePlusCommissionEmployee.h"
  4.  
  5. BasePlusCommissionEmployee::BasePlusCommissionEmployee(const string &first, const string &last, const string &ssn,double sales, double rate,double salary)
  6. :CommissionEmployee(first,last,ssn,sales,rate)
  7. {
  8.     setBaseSalary(salary);
  9. }
  10. void BasePlusCommissionEmployee::setBaseSalary(double salary)
  11. {
  12.     baseSalary=((salary <0.0)?0.0:salary);
  13. }
  14. double BasePlusCommissionEmployee::getBaseSalary() const
  15. {
  16.     return baseSalary;
  17. }
  18. double BasePlusCommissionEmployee::earnings() const
  19. {
  20.     return getBaseSalary()+ CommissionEmployee::earnings();
  21. }
  22. void BasePlusCommissionEmployee::print() const
  23. {
  24.     cout<<"base salaried : ";
  25.     CommissionEmployee::print();
  26.     cout<<"; base salary: "<<getBaseSalary();
  27. }


main.cpp
Codice sorgente - presumibilmente C++

  1. #include <iostream>
  2. using namespace std;
  3. #include <iomanip>
  4. using std:: setprecision;
  5. #include <vector>
  6. using std::vector;
  7. #include "Employee.h"
  8. #include "SalariedEmployee.h"
  9. #include "HourlyEmployee.h"
  10. #include "CommissionEmployee.h"
  11. #include "BasePlusCommissionEmployee.h"
  12.  
  13.  
  14. void virtualViaPointer(const Employee * const);
  15. void virtualViaReference(const Employee &);
  16.  
  17. int main(int argc, const char * argv[])
  18. {
  19.   //imposto il valore per formato con virgola
  20.     cout<<fixed<<setprecision(2);
  21.     //creo oggetti delle classi derivate
  22.     SalariedEmployee salariedEmployee(
  23.                                       "Raffaele", "Sanseverino","111-12-1212",800 );
  24.     HourlyEmployee hourlyEmployee( "Mario","Esposito", "222-22-2234",16.75,40);
  25.     CommissionEmployee commissionEmployee ( "Sue","Jones","333-33-3335",1000.06);
  26.     BasePlusCommissionEmployee basePlusCommissionEmployee( "Pietro","Volente","444-44-4547",5000.04,300);
  27.     cout<<"Employees processed individually using static  binding:\n\n";
  28.     salariedEmployee.print();
  29.     cout<<"\nearned € "<<salariedEmployee.earnings()<<"\n\n";
  30.     hourlyEmployee.print();
  31.     cout<<"\nearned "<<hourlyEmployee.earnings()<<"\n\n";
  32.     commissionEmployee.print();
  33.     cout<<"\nearned "<<commissionEmployee.earnings()<<"\n\n";
  34.     basePlusCommissionEmployee.print();
  35.     cout<<"\nearned "<<basePlusCommissionEmployee.earnings()<<"\n\n";
  36.    
  37.     vector <Employee * > employees(4);
  38.     employees[0]=&salariedEmployee;
  39.     employees[1]=&hourlyEmployee;
  40.     employees[2]=&commissionEmployee;
  41.     employees[3]=&basePlusCommissionEmployee;
  42.     cout<<"Employees processed polymophically via dynamic binding :\n\n";
  43.     cout<<" Virtual function calls made off base-class pointers:\n\n";
  44.     for(size_t i=0;i<employees.size();i++)
  45.         virtualViaPointer(employees[i]);
  46.     cout<<"Virtual function calls made off base-class reference:\n\n";
  47.     for(size_t i=0;i<employees.size();i++)
  48.         virtualViaReference(*employees[i]);
  49.     return 0;
  50.    
  51. }
  52.  
  53. void virtualViaPointer(const Employee * const baseClassPtr)
  54. {
  55.     baseClassPtr->print();
  56.     cout<<"\earned € "<<baseClassPtr->earnings()<<"\n\n";
  57. }
  58. void virtualViaReference(const Employee &baseClassRef)
  59. {
  60.     baseClassRef.print();
  61.     cout<<"\nearned € "<<baseClassRef.earnings()<<"\n\n";
  62. }


Se qualcuno mi aiutasse a capirne il motivo , grazie :):hail:

PM Quote
Avatar
Birkhoff92 (Normal User)
Rookie


Messaggi: 31
Iscritto: 27/03/2014

Segnala al moderatore
Postato alle 9:40
Martedì, 25/10/2016
mi da anche quest altro errore :/


Birkhoff92 ha allegato un file: Schermata 2016-10-25 alle 09.40.13.png (747561 bytes)
Clicca qui per guardare l'immagine
PM Quote
Avatar
nessuno (Normal User)
Guru^2


Messaggi: 6380
Iscritto: 03/01/2010

Segnala al moderatore
Postato alle 10:20
Martedì, 25/10/2016
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à.
PM Quote
Avatar
Birkhoff92 (Normal User)
Rookie


Messaggi: 31
Iscritto: 27/03/2014

Segnala al moderatore
Postato alle 10:25
Martedì, 25/10/2016
ci manca un double=0.0 ? :/ sul libro non lo portava per questo

PM Quote
Avatar
nessuno (Normal User)
Guru^2


Messaggi: 6380
Iscritto: 03/01/2010

Segnala al moderatore
Postato alle 10:30
Martedì, 25/10/2016
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à.
PM Quote
Avatar
Birkhoff92 (Normal User)
Rookie


Messaggi: 31
Iscritto: 27/03/2014

Segnala al moderatore
Postato alle 16:12
Martedì, 25/10/2016
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
PM Quote
Avatar
nessuno (Normal User)
Guru^2


Messaggi: 6380
Iscritto: 03/01/2010

Segnala al moderatore
Postato alle 16:13
Martedì, 25/10/2016
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à.
PM Quote
Avatar
Birkhoff92 (Normal User)
Rookie


Messaggi: 31
Iscritto: 27/03/2014

Segnala al moderatore
Postato alle 16:46
Martedì, 25/10/2016
pagina 706 figura 13.19. Si stesso identico errore

PM Quote
Avatar
nessuno (Normal User)
Guru^2


Messaggi: 6380
Iscritto: 03/01/2010

Segnala al moderatore
Postato alle 17:07
Martedì, 25/10/2016
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à.
PM Quote
Pagine: [ 1 2 3 ] Precedente | Prossimo