A
Born15 schrieb:
Danke für die schöne Erklärung asc.
Wäre noch schöner wenn du sie wirklich verstehen würdest.
Born15 schrieb:
Hier mein code .
... der leider noch immer genauso schlecht wie vorher ist. Lies ein Einstiegsbuch (In deinem Fall würde ich zu "C++ from zero to hero" raten, die anderen dürften dir vermutlich noch zu schwer sein).
Born15 schrieb:
Ein wenig meckern tut der Compiler noch.
Ganz ehrlich: Ich an stelle des Compilers würde richtig stark meckern. Vermutlich ist die Warnstufe viel zu niedrig (Um welchen Compiler handelt es sich?).
#ifndef CTIP_H_
#define CTIP_H_
#include <iostream>
#include <string> // Einheitlich einrücken
// using namespace std; - NIEMALS IM HEADER!!!
// Du solltest deine IDE so einstellen, das Tabulatoren durch Leerzeichen
// ersetzt werden, dann sieht der Code auch im Forum angenehm aus.
class CTip {
private:
// Was nun? Dynamische Speicherverwaltung oder nicht?
// Dynamische Speicherverwaltung => Hier ein Zeiger nötig, kein Array!
// unsigned short m_numbers[6];
unsigned short * m_numbers; // <-- Du wolltest dynamische Speicherverwaltung
unsigned short m_countNumbers = 0;
public:
CTip();
// Sobald mindestens eins der folgenden nötig ist (und mit dynamischer
// Speicherveraltung sind diese nötig)...:
// - Destruktor
// - Kopierkonstruktor
// - Zuweisungsoperator
// MÜSSEN auch die anderen geschrieben werden.
~CTip();
CTip(CTip& origin);
CTip& operator=(CTip& origin); // Zuweisungsoperator
bool addNumber(unsigned short number); // Einheitliche Einrückung
bool isValid();
unsigned short operator*(CTip& other);
friend std::ostream& operator <<(std::ostream& out, CTip& const tip);
};
std::ostream& operator <<(std::ostream& out, CTip& const tip);
#endif /* CTIP_H_ */
Born15 schrieb:
neue Header:
Ich hoffe der Copy Konstruktor ist richtig, da war ich mir nicht 100% sicher.
Nicht einmal ansatzweise.
#include <iostream>
#include <string>
#include "CTip.h"
using namespace std;
CTip::CTip()
: m_numbers(new unsigned short[6]), // <-- Initialisierungsliste
countNumbers(0)
{
// <-- Hier wurden bereits die Member initialisiert, alles hier drin
// ist eine _nachträgliche_ Zuweisung.
// Lokale Variable: unsigned int * m_numbers = unsigned short[6];
// Wenn schon: m_numbers = unsigned short[6];
// m_countNumbers = 0;
}
~CTip::CTip(){
delete[] m_numbers;
}
CTip::CTip(CTip& origin)
: m_numbers(new unsigned short[6]), // <-- Initialisierungsliste
countNumbers(0)
{
// 1. Das neue Objekt benötigt einen eigenen Speicherbereich
// (in Initialisierungsliste erzeugt)
// 2. Werte aus dem Ursprungsarray sind zu kopieren.
for(unsigned pos=0; pos<6; ++pos)
m_numbers[pos] = origin.m_numbers[pos]
// Was soll das werden?
// Lokale Variable, unsinnige Einrückung: unsigned int*origin_m_numbers = unsigned short[6];
// Gibts nicht: origin_m_countNumbers = 0;
// Meinst du: origin.m_countNumbers?
}
CTip& CTip::operator=(CTip& origin)
{
// Hier existieren die Member bereits, doch die Werte müssen übertragen
// werden (NICHT DEN ZEIGER KOPIEREN, SONDERN DEN INHALT!).
// 2. Werte aus dem Ursprungsarray sind zu übertragen.
for(unsigned pos=0; pos<6; ++pos)
m_numbers[pos] = origin.m_numbers[pos]
countNumbers = origin.m_countNumbers;
return *this; // Sich selbst zurückgeben
}
std::ostream& operator<<(std::ostream& out, CTip& tip)
{
// Sauber und einheitlich einrücken!
for(int i = 0; i < 6; i++)
out << tip.m_numbers[i] << " ";
return out;
}
bool CTip::addNumber(unsigned short numberToAdd){
if(m_countNumbers >= 6){
//kein Platz mehr zum Anhängen
return false; //liefere Fehler zurück
}
if(m_countNumbers <= 6){
m_numbers[m_countNumbers++] = numberToAdd;
return true; //"alles OK" aus Antwort
}
}
CTip::bool isValid(){
if(m_countNumbers ==6){
return true;
}
// <-- Und was gibst du sonst zurück?
}
Dies ist meine letzte Hilfe, da du keinerlei Lerneffekt zeigst, vorher genannte Fehler weder beachtest noch hinterfragst... Zudem ist meine Lösungshilfe für dich ohnehin wertlos, ich sehe das du mit der restlichen Aufgabenstellung ohnehin nicht klar kommen wirst.
Wenn du wirklich Hilfe willst:
a) Beachte den Thead: Wichtig: Du brauchst Hilfe?
b) Antworte auch auf Rückfragen.
c) Stelle _konkrete_ Fragen.
Ich für meinen Teil klinke mich hier aus.