Ich habe auf einige Schul Problem gearbeitet und ich, wo ich der Speicherzuweisung kümmerten im operator>>
jedoch andere Lösung sah, so habe ich etwas über hier verwirrt .. Die operator>>
funktioniert gut, wenn zusammengestellt und gibt gute Ausgaben, aber ich verstehe nicht, warum hier ist der Code .. (Warum ich verwirrt wurde unter dem Code ist)dynamische Speicherzuweisung und Eingang (Strom) Operator C++
class Some
{
protected:
char *name;
int price;
int anything;
public:
Some(const char *name="", const int anything=0, const int price=0)
{
this->name=new char[strlen(name)+1];
strcpy(this->name, name);
this->anything = anything;
this->price=price;
}
~Some() { delete [] name; }
friend istream &operator>>(istream &in, Some &i)
{
return in>>i.name>>i.anything>>i.price;
}
void print(){
cout << name << " " << anything << " " << price;
}
};
Haupt
int main() {
// your code goes here
Some n;
cin >> n;
n.print();
return 0;
}
So mit Some n
wir haben ein Objekt erstellt, aber der Konstruktor hat Speicher für nur 1 Zeichen zugewiesen, korrigiere mich, wenn ich falsch liege (und setze einige Standardwerte). Danach verwenden wir die >> operator
, um ein Objekt des Typs Some
einzugeben, jedoch ist nur ein Zeichen für die name
reserviert und wir können so viel eingeben, wie wir wollen .. Hier ist die kompilierte Version mit einigen Eingaben Compiled Code. Wo liege ich falsch in meinem Denken? Oder das sollte nicht gemacht werden. Vielen Dank !!
Ps wir nicht benutzen Bibliotheken erlaubt die Pflege der Zuordnung nehmen ..
Ihre Klasse verletzt die Regel der Drei. Das Eingeben von Daten beliebiger Länge in ein Char-Array ist ein schweres Problem ... – aschepler
Sie haben Recht. Dieser Code ist (fürchterlich) kaputt. –
@aschepler Ja, ich weiß, aber das ist nur ein Teil der Klasse, weil ich keine großen Blöcke von Code, die nicht mit meiner Frage verbunden sind. –