2016-07-31 17 views
-3

Diese Codierung, wo ich Funktion Überladung verwendet, ist ein Code, wo Benutzer ihren Zeiger für 4 Fächer und seine Kredit Stunde eingeben müssen, so druckt es aus GPA. Die Sache ist, ich habe 3 Parameter in Student (String test123, String Nama, String Vinto). Aber ich möchte nur einen der beiden string anzeigen. Sagen wir, ich möchte, dass der Vinto ausgedruckt wird. Wie kann ich den Vinto in meiner Anzeigefunktion aufrufen, so dass er Vinto ausgibt. Heres ist meine Codierung.Kann mir jemand helfen, wie dieser Funktionsparameter aus der Klasse in meiner Ausgabe angezeigt werden

CPP.cpp

#include <iostream> 
#include "student.h" 

using namespace std; 

void main(void) 
{ 
    string nama; 
    string test123; 
    int i; 

    Student StudentA(test123, nama, "vinto"); 

    cout << "key in points for 4 subject\n"; 
    StudentA.Getpointers(); 

    StudentA.Display(test123); 

} 

Student.h

#include<iostream> 
#include<string> 

using namespace std; 

class Student 
{ 
public: 
    Student(string test123, string nama, string vinto); 
    void Getpointers(); 
    void Display(string name); 

private: 
    double points[4]; 
    int creditHours[4]; 
    string name; 
    double CalculateGPA(); 
}; 

Student.cpp

#include <iostream> 
#include <iomanip> 
#include<string> 
#include "student.h" 

using namespace std; 

Student::Student(string test123, string nama, string vinto) 
{ 
    name = nama; 
} 
void Student::Getpointers() 
{ 
    for (int i = 0; i<4; i++) 
    { 
     cout << "points for subject :" << i + 1 << endl; 
     cin >> points[i]; 
     cout << "credit hour for subject " << i + 1 << endl; 
     cin >> creditHours[i]; 
    } 
} 
void Student::Display(string name) 
{ 
    cout << "Hello " << name << endl; 
    cout << "Your current GPA is " << setprecision(3) << CalculateGPA() << endl; 
} 
double Student::CalculateGPA() 
{ 
    double totalpoints = 0; 
    int totalcreditHours = 0; 
    for (int i = 0; i<4; i++) 
    { 
     totalpoints += (points[i] * creditHours[i]); 
     totalcreditHours += creditHours[i]; 
    } 

    return totalpoints/totalcreditHours; 
} 

Antwort

1

Nun, das vinto Argument Ihres Konstruktor wird nicht überall gespeichert, so dass in diesem Beispiel, Sie können es nicht zurückbekommen. Allerdings könnten Sie es speichern:

zunächst eine vinto Feld der Klasse hinzufügen:

class Student 
{ 
public: 
    Student(string test123, string nama, string vinto); 
    void Getpointers(); 
    void Display(string name); 

private: 
    double points[4]; 
    int creditHours[4]; 
    string name; 
    string vinto; 
    double CalculateGPA(); 
}; 

Dann speichern Sie die vinto Argument Wert in diesem Feld:

Student::Student(string test123, string nama, string vinto) 
{ 
    name = nama; 
    this->vinto = vinto; 
} 

Danach, Sie kann vinto verwenden:

void Student::Display(string name) 
{ 
    cout << "Hello " << name << endl; 
    cout << "Your current GPA is " << setprecision(3) << CalculateGPA() << endl; 
    cout << "Your vinto is " << vinto << endl; 
} 

Auch ist es ein bisschen seltsam dass Sie Student name im Objektfeld speichern, aber einen anderen Namen verwenden (der an Student::Display übergeben wird), um ihm Hallo zu sagen.

+0

Gibt es einen Weg, wo ich nur einen der 3 Parameter ((string test123, string nama, string vinto)) in Display() aufrufen kann, so am Ende druckt es den Parameter, den ich aufrufen Display() . Sagen wir, wenn ich möchte, dass vinto am Ende angezeigt wird, lege ich display (vinto) an und ich möchte es dem Wertnamen zuweisen. –

+1

Nicht sicher, dass ich dich verstehe. Der Code in der Methode (wie in 'Student :: Display') hat nur Zugriff auf einige Daten (zum Beispiel globale Variablen, Methodenargumente und Klassenmitglieder), also sollten Sie Ihre Daten irgendwo in diesem Speicher ablegen. Das Codebeispiel oben setzt 'vinto' in das Klassenmitglied. Vielleicht ist es hier vorzuziehen, es als Methode Argument übergeben. – alexeykuzmin0