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: 6405
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: 6405
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: 6405
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: 6405
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