Übergeben Sie die Objekte der Klasse in die Funktion Parameter c++
Habe ich gelesen, einige der zuvor gestellten Fragen zu diesem Thema, aber kann nicht scheinen, um die Antwort zu finden, was ich Suche. Wenn ich das Programm starte erhalte ich keine Fehler, aber ich bekomme eine Menge Datenmüll. Ich weiß, es ist weil ich bin nicht die übergabe der Parameter Recht, aber ich bin neu in c++ und speziell, wie die Verwendung von Zeigern richtig. Es einfach zu machen: ich bin vorbei ein Mitarbeiter-Objekt durch PrintCheck()
fordert die CalcSalary()
- Funktion, die verwenden müssen GetHours()
und GetWage()
Zugang member-Daten zu tun, die Berechnungen und die Rückgabe der richtige salary
. Würde schätzen, irgendwelche Erklärungen, warum ich bin, Erzeugung von Datenmüll!
Ich habe eine Klasse:
class Employee
{
private:
int employeeNumber;
string name;
string streetAddress;
string phoneNumber;
double hourlyWage;
double hoursWorkedperWeek;
public:
Employee(void);
Employee(int, string, string, string, double, double);
int GetEmployeeNum() const;
void SetEmployeeNum(int);
string GetName() const;
void SetName(string);
string GetAddress() const;
void SetAddress(string);
string GetPhone() const;
void SetPhone(string);
double GetWage() const;
void SetWage(double);
double GetHours() const;
void SetHours(double);
double CalcPay(double, double);
};
Ich habe auch eine Funktion, muss die Interaktion mit der Klasse:
void PrintCheck(Employee&);
Meine main Funktion sieht wie folgt aus:
void main()
{
Employee joe(1, "Joe Blo", "125 Cool St.", "555 555 5555", 10.00, 45); //create employee 1
Employee jane(2, "Jane Doe", "521 Dumb St.", "1 800 555 5555", 12.50, 30); //create employee 2
PrintCheck(joe); //print check
}
Den printcheck-Funktion sieht wie folgt aus:
void PrintCheck(Employee& a)
{
cout << "Pay to the order of " << a.GetName() << "...................................";
cout << a.CalcPay(a.GetWage(), a.GetHours()) << endl;
cout << "Hours worked: " << a.GetHours() << endl;
cout << "Hourly wage: " << a.GetWage() << endl;
}
Calcpay Funktion:
double Employee::CalcPay(double h, double w)
{
double salary = 0;
int OT = 40;
double timeandahalf = 1.5;
double STATE = .075;
double FED = .20;
if (h > OT) //overtime
{
salary = h * (w * timeandahalf); //calc time and a half
salary = salary * STATE; //calc state deductions
salary = salary * FED; //calc federal deductions
}
else
{
salary = h * w; //calc salary
salary = salary * STATE; //calc state deductions
salary = salary * FED; //calc federal deductions
}
cout.setf(ios::fixed);
cout.setf(ios::showpoint);
cout.precision(PRECISION);
return salary;
}
Meine "get" - Funktionen alle Folgen diesem Muster:
int Employee::GetEmployeeNum() const
{
return employeeNumber;
}
Meine erwartete Ausgabe wäre:
Pay to the order of: Joe Blo............ $salary.
Hours worked: $hours.
Hourly wage: $wage.
Was ich habe:
Pay to the order of: ........................ 128509280503000000000000000000000000000.00 (this number is long, but I didn't feel like typing them all)
Hours worked: -9723636237 (same, just tons of bs numbers)
Hourly wage: (the exact same number as above)
Meiner Klasse-Konstruktor:
Employee::Employee(int en, string n, string a, string p, double w, double h)
{
int employeeNumber = en;
string name = n;
string streetAddress = a;
string phoneNumber = p;
double hourlyWage = w;
double hoursWorkedperWeek = h;
}
Employee::Employee()
{
}
Was bedeutet die Umsetzung für den Konstruktor
Employee(int, string, string, string, double, double)
Aussehen?Sehen Sie Ihre Sprache. Ich werde Bearbeiten, es für Sie dieses mal aber in die Zukunft kann das ein mod löschen Sie Ihre post-ohne auch nur zu Blinzeln.
Wird der Konstruktor korrekt init ' Ing der Instanz?
Sorry über die Sprache, Sie wissen, wie frustrierend Fehler sein kann! Bearbeitete ich in meinem Konstruktor an der Unterseite der post.
InformationsquelleAutor xavi | 2013-09-16
Du musst angemeldet sein, um einen Kommentar abzugeben.
Ihre
Employee::Employee(int en, string n, string a, string p, double w, double h)
ist, deklarieren von neuen lokalen Variablen drin und daher shadowing der member-Variablen innerhalb Ihrer Klasse. Also in der Realität, die Sie nie richtig initialisiert jedes Ihrer Mitglieder während der Bauphase.Sollte Folgendes richtig, dass problem:
Ein build-Fehler sagt "gefunden, was sollte eine Komma-getrennte Liste". Auf jeder der Linien.
Hoppla, vergessen zu beheben, die Kommas beim kopieren/einfügen, versuchen Sie es jetzt
Sehen Sie sich das an! Funktioniert perfekt. Könnten Sie vielleicht erklären, warum diese syntax ermöglicht meine Daten?
Diese ist mit einem Initialisierungsliste.
InformationsquelleAutor greatwolf
Dies ist der Fehler,
sollte es
oder noch besser es sollte so sein, wie in greatwolf Antwort.
Dem Fehler in deiner version ist, dass Sie die deklarierten Variablen im Konstruktor mit genau dem gleichen Namen wie die Mitglieder Ihrer Klasse. Diese Variablen verstecken Ihre Schüler, so dass der Konstruktor nicht die Initialisierung Ihrer Klasse. Also bekommst du Müll.
C++ ist voller Fallstricke.
InformationsquelleAutor john