我对以下代码有疑问。它的想法是使用“<<”和“>>”操作员输入和打印不同的值。我的问题是 - 如何将anzahl
和zahlen
成员设为私有而非公开?如果我只是在私有中键入它们,我就不能将它们用于类之外的方法。我还可以在代码中修改一些内容以使其更好吗?
#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;
}
答案 0 :(得分:0)
非会员功能无法加入私人会员。您可以operator<<
friend
:
class Liste{
friend ostream& operator<<(ostream& Stream, const Liste &list);
...
};
或为其添加成员函数:
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;
}
...
};
然后从operator<<
:
ostream& operator<<(ostream& Stream, const Liste &list)
{
list.print(Stream);
return Stream;
}
顺便说一句:您应该在Stream
中使用operator<<
,而不是cout
。