2016-06-14 12 views
0

Ich habe eine Frage zu dem folgenden Code. Seine Idee ist, die Operatoren "< <" und ">>" zu verwenden, um verschiedene Werte einzugeben und zu drucken. Meine Frage ist - wie kann ich die anzahl und zahlen Mitglieder privat und nicht öffentlich machen? Wenn ich sie nur in Privates eintippe, kann ich sie nicht für die Methoden außerhalb der Klasse verwenden. Gibt es auch etwas, das ich im Code ändern kann, um es besser zu machen?Mitglieder von öffentlich zu privat wechseln

#include <iostream> 
#include <cmath> 

using namespace std; 

class Liste{ 

public: 
int anzahl; 
int * zahlen; 
Liste(){ 
cout <<"Objekt List is ready" << endl; 
anzahl = 0; 
} 
~Liste(){ 
cout <<"Objekt destroyed" << endl; 
delete (zahlen); 
} 
void neue_zahlen(int zahl){ 

if(zahl == 0){ return;} 

if(anzahl == 0){ 

    zahlen = new int[anzahl+1]; 
    zahlen[anzahl] = zahl; 
    anzahl++; 
    } 
    else{ 

    int * neue_zahl = new int[anzahl+1]; 
     for(int i = 0; i < anzahl; i++){ 
      neue_zahl[i] = zahlen[i]; 
     } 
    neue_zahl[anzahl] = zahl; 
    anzahl++; 

    delete(zahlen); 
    zahlen = neue_zahl; 
    } 

    } 
    }; 






// Liste ausgeben 

ostream& operator<<(ostream& Stream, const Liste &list) 
{ 
cout << '['; 
    for(int i=0; i < list.anzahl; i++){ 

      cout << list.zahlen[i]; 
    if (i > (list.anzahl-2) { 
     cout << ','; 
    } 
     } 
    cout << ']' << endl; 

return Stream; 
} 


//Operator Liste einlesen 

istream& operator>>(istream&, tBruch&){ 

cout<< 

} 




int main(){ 

Liste liste; //Konstruktor wird aufgerufen 
int zahl; 
cout <<"enter the numbers" << endl; 
do{ 
     cin >> zahl; 
     liste.neue_zahlen(zahl); 

    }while(zahl); 


    cout<<liste; 

    } 

Antwort

0

Private Mitglieder können nicht von Nichtmitgliedsfunktionen angesprochen werden.

class Liste{ 
    friend ostream& operator<<(ostream& Stream, const Liste &list); 
    ... 
}; 

Oder eine Member-Funktion für sie hinzufügen: Sie können operator<<friend machen

class Liste{ 
    public: 
    void print(ostream& Stream) const { 
     Stream << '['; 
     for (int i=0; i < list.anzahl; i++) { 
      Stream << list.zahlen[i]; 
      if (i > (list.anzahl-2) { 
       Stream << ','; 
      } 
     } 
     Stream << ']' << endl; 
    } 
    ... 
}; 

dann nennen es von operator<<:

ostream& operator<<(ostream& Stream, const Liste &list) 
{ 
    list.print(Stream); 
    return Stream; 
} 

BTW: Sie Stream in operator<< verwenden sollten, nicht cout.

+0

Danke, hat es mit Freund funktioniert und es funktioniert alles jetzt. Ich werde es auch andersherum versuchen :)) – specbk

Verwandte Themen