2016-04-24 14 views
-3

Ich bin neu in C++ und arbeite an einem Projekt für die Klasse. Ich weiß, dass einige meiner Funktionen nicht korrekt sind. Ich versuche, zu einem Punkt zu kommen, an dem ich zumindest sehen kann, dass die Ausgabe weiter daran arbeitet. Ich habe eine kurze Beschreibung von dem, was ich versuche, aufgenommen.Objekthierarchie Mitarbeiterprogramm - Dereferenzierung Zeiger für cout

#define _CRT_SECURE_NO_WARNINGS 
#include <iostream> 
using namespace std; 

class Employee 
{ 
protected: 
    char* name[50]; 
public: 

Employee() 
{ 

} 

Employee(char* name) 
{ 
    strcpy(name, name); 
} 

char* getName() 
{ 
    return *name; 
} 
void setName(char* name) 
{ 
    name = name; 
} 

/*virtual ~Employee() 
{ 
    delete[] name; 
}*/ 

virtual void print() = 0; 


}; 

class HourlyEmployee : public Employee 
{ 
private: 
    float HourlySalary; 
public: 


HourlyEmployee() 
{ 
    HourlySalary = 0; 
} 
HourlyEmployee(char* name, float HourlySalary) 
{ 
    name = name; 
    HourlySalary = HourlySalary; 
} 
double getHourlySalary() 
{ 
    return HourlySalary; 
    //cout << "What is your Hourly Salary" << endl; 
    //cin >> HourlySalary; 
} 
void setHourlySalary(double HourlySalary) 
{ 

} 
void print() 
{ 
    cout << "Hourly Employee Name: " << &name << endl 
     << "Salary: " << &HourlySalary << "per hour" << endl; 
} 

}; 

class SalariedEmployee : public Employee 

{ 
private: 
    float MonthlySalary; 

public: 

SalariedEmployee() 
{ 
    MonthlySalary = 0; 
} 
SalariedEmployee(char* name, float MonthlySalary) 
{ 

} 
double getMonthlyySalary() 
{ 
    return MonthlySalary; 
    //cout << "What is your Hourly Salary" << endl; 
    //cin >> MonthlySalary; 
} 
void setMonthlySalary(double MonthlySalary) 
{ 

} 
void print() 
{ 
     cout << "Hourly Employee Name: " << name << endl 
      << "Salary: " << MonthlySalary << "per month" << endl; 
} 

}; 

int main() { 
SalariedEmployee* S = new SalariedEmployee(); 
SalariedEmployee S1("Joe Bob", '4500'); 

HourlyEmployee* H = new HourlyEmployee(); 
HourlyEmployee H1("Jim Bob", '20'); 

S1.print(); 
H1.print(); 

delete S, H; 

system("pause"); 
return 0; 
} 

Antwort

1

Aus der Beschreibung Ihrer Übung, die ich festgestellt, dass du so etwas fragst:

#include <iostream> 
using namespace std; 

class Employee 
{ 
protected: 
    char name[50]; 
public: 

    Employee() 
    { 

    } 

    Employee(char* name) 
    { 
     strncpy_s(this->name, 49, name, 49); 
    } 

    char* getName() 
    { 
     return this->name; 
    } 

    void setName(char *name) 
    { 
     strncpy_s(this->name, 49, name, 49); 
    } 

    virtual void print() = 0; 
}; 

class HourlyEmployee : public Employee 
{ 
private: 
    float hourlySalary; 
public: 


    HourlyEmployee() 
    { 
     hourlySalary = 0; 
    } 
    HourlyEmployee(char* name, float HourlySalary) 
    { 
     strncpy_s(this->name, 49, name, 49); 
     this->hourlySalary = HourlySalary; 
    } 

    double getHourlySalary() 
    { 
     return hourlySalary; 
     //cout << "What is your Hourly Salary" << endl; 
     //cin >> HourlySalary; 
    } 

    void setHourlySalary(double HourlySalary) 
    { 
     this->hourlySalary = HourlySalary; 
    } 

    void print() 
    { 
     cout << "Hourly Employee Name: " << this->name << endl 
      << "Salary: " << hourlySalary << " per hour" << endl; 
    } 

}; 

class SalariedEmployee : public Employee 

{ 
private: 
    float MonthlySalary; 

public: 

    SalariedEmployee() 
    { 
     MonthlySalary = 0; 
    } 

    SalariedEmployee(char* name, float MonthlySalary) 
    { 
     strncpy_s(this->name, 49, name, 49); 
     this->MonthlySalary = MonthlySalary; 
    } 

    double getMonthlyySalary() 
    { 
     return MonthlySalary; 
     //cout << "What is your Hourly Salary" << endl; 
     //cin >> MonthlySalary; 
    } 

    void setMonthlySalary(double MonthlySalary) 
    { 
     this->MonthlySalary = MonthlySalary; 
    } 

    void print() 
    { 
     cout << "Hourly Employee Name: " << name << endl 
      << "Salary: " << MonthlySalary << " per month" << endl; 
    } 

}; 

int main() 
{ 
    Employee * employee[2]; 
    employee[0] = new SalariedEmployee("Joe Bob", 4000); 
    employee[1] = new HourlyEmployee("Jim Bob", 20); 

    for (int i = 0; i < 2; i++) 
    { 
     employee[i]->print(); 
    } 

    for (size_t i = 0; i < 2; i++) 
    { 
     delete employee[i]; 
    } 
    system("pause"); 
    return 0; 
} 

First off, Ihre name gotta Variable vom Typ char [50], nicht * char [50]. Also habe ich strncpy (oder die sichere Funktion strncpy_s) verwendet, um die name in unserem Konstruktor zu kopieren. Da Sie sich mit Zeichen beschäftigen, können Sie sie nicht wie in einigen Teilen Ihres Codes zuweisen, wie dies name = name. Und ich habe this->name verwendet, weil die Variablennamen identisch sind. Als nächstes müssen Sie in Ihrer Hauptfunktion die Klasse Employee haben und sie dann einer HourlyEmployee und SalariedEmployee zuweisen, denn das sind die Prinzipien der Polymorphie. Ich hoffe, dass ich Ihnen geholfen habe und wenn Sie irgendwelche Fragen haben, zögern Sie nicht zu fragen.

`

+0

Vielen Dank für die Antwort, ich werde meine Fehler jetzt überprüfen, und ich werde Sie wissen lassen, wenn ich irgendwelche Fragen habe. – K455306