C++ Programmierung |
Jassy unregistriert
|
|
aber wie erkennt er denn sonst die andere Klasse dann euler ?
Muss ich dann gar nichts machen?
|
|
08.12.2013 17:47 |
|
|
|
Im Header steht:
code: |
1:
2:
3:
4:
5:
6:
7:
8:
9:
|
class CMeasValue
{
//...
};
class CMeasSeries : public CMeasValue
{
//...
}; |
|
in der .cpp:
code: |
1:
2:
3:
4:
5:
|
int CMeasValue:: getExp()
double CMeasValue::getMeasValue(int exp)
bool CMeasSeries::put( double value, int exp, string baseUnit)
bool CMeasSeries::getMaxValue(CMeasValue& maxMeasValue) |
|
das ist doch eindeutig zuzuordnen.
__________________ Syntax Highlighting fürs Board (Link)
|
|
08.12.2013 17:50 |
|
|
Jassy unregistriert
|
|
tut mir leid euler ,das ich vielleicht das so schwer verstehe.
Jetzt funktioniert es auch wieder.
Und danke für deine Geduld.
Hast du auch paar tipss für mich wie ich hier genau denken soll?
Die print()-Methode soll die Adresse
des Messreihen-Objektes, die maximale Anzahl zu speichernder Messwerte, die
Grundeinheit der Messreihe und die aktuell gespeicherten Messwerte zusammen mit ihrem
Index anzeigen.
WIe soll ich hier vorgehen?
|
|
08.12.2013 17:58 |
|
|
|
Bevor du etwas ausgeben kannst, solltest du dir Gedanken über das Befüllen mit Messwerten machen. Hast du da eine Funktion vorgegeben, oder sollst du die selbst schreiben?
Falls du etwas gegeben hast, kopiere es bitte hierher, das erspart mir die Arbeit.
Beim print musst du einfach für jeden der Messwerte mit cout << messwert etwas auf die Konsole pinseln.
__________________ Syntax Highlighting fürs Board (Link)
|
|
08.12.2013 18:04 |
|
|
Jassy unregistriert
|
|
Es ist nur das Diagramm gegeben (UML)
m_values: CMeasValue*
-m_maxValues: int
{0<m_maxValues}
-m_curValues: int = 0
{0<=m_curValues<m_maxValues}
-m_baseUnit: string
+CMeasSeries(baseUnit:string="",maxValues:int=10)
+~CMeasSeries()
+put(value:double,exp:int,baseUnit:string): bool
+getMaxValue(maxMeasValue:CMeasValue&): bool
+print(): void
Mehr nicht.
Das Befüllen von Messwerten macht man doch mit this oder?
|
|
08.12.2013 18:11 |
|
|
|
Dann stammt
code: |
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
|
CMeasSeries::CMeasSeries(string baseUnit, int maxValues)
{
if( 0 < maxValues )
{
m_maxValues = maxValues;
m_baseUnit = baseUnit;
}
else
{
m_baseUnit = "";
maxValues = 10;
}
CMeasSeries::CMeasSeries();
} |
|
von dir?
Dann kann ich ja daran mäkeln
Es gibt keinen zweiten Konstruktor (ist auch überflüssig wegen der default-Werte).
Stattdessen gibt es laut deinem Klassendiagramm einen Destruktor.
code: |
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
|
CMeasSeries::CMeasSeries(string baseUnit, int maxValues)
{
if(maxValues > 0)
{
m_maxValues = maxValues;
m_baseUnit = baseUnit;
}
else
{
m_baseUnit = "";
maxValues = 10;
}
// #include <cstdlib>
m_values = (CMeasValue*)malloc(m_maxValues * sizeof(CMeasValue));
}
CMeasSeries::~CMeasSeries()
{
free(m_values);
} |
|
__________________ Syntax Highlighting fürs Board (Link)
|
|
08.12.2013 18:21 |
|
|
Jassy unregistriert
|
|
code: |
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
|
CMeasSeries::CMeasSeries(string baseUnit, int maxValues)
{
if(maxValues > 0) Wieso hast du hier die Bedingung geändert?
{
m_maxValues = maxValues;
m_baseUnit = baseUnit;
}
else
{
m_baseUnit = "";
maxValues = 10;
}
}
CMeasSeries::~CMeasSeries()
{
free(m_values); // Muss man das hier schreiben ?
} |
|
[/quote]
Fragen siehe code ?
Ich hoffe du bist noch nicht kaputt durch meine fragen.
Und tut mir leid warum machst du das hier?
// #include <cstdlib>
m_values = (CMeasValue*)malloc(m_maxValues * sizeof(CMeasValue));
Bitte um erklärung.
|
|
08.12.2013 18:31 |
|
|
|
Ich habe die Bedingung nicht wirklich geändert, nur rechts und links getauscht (finde ich so lesbarer).
Zitat: |
Und tut mir leid warum machst du das hier? |
Weil ich gerade nichts besseres zu tun habe - oder meinst du das malloc?
Das malloc mache ich, um für die Messwerte Speicherplatz zu schaffen, irgendwo müssen die ja hin.
__________________ Syntax Highlighting fürs Board (Link)
|
|
08.12.2013 18:35 |
|
|
Jassy unregistriert
|
|
Könnte ich für m_value nicht auch so speicher anlegen mit new?
Weiss nicht ob ich es so richtig mach.
double *m_valueZeiger = new double;
Für was muss ich denn alles speicher anlegen?
Nur für messwerte?
|
|
08.12.2013 18:44 |
|
|
|
Genau, und du musst auch wieder darauf zugreifen können.
Es macht keinen Sinn, Variablen Messwert1, Messwert2, ... anzulegen.
Ein Array geht auch nicht, weil du nicht weiß, wie viele Messwerte gespeichert werden sollen. Daher die dynamische Speicherreservierung.
__________________ Syntax Highlighting fürs Board (Link)
|
|
08.12.2013 18:48 |
|
|
Jassy unregistriert
|
|
void print(){
double *m_valueZeiger = new double;
// Zugreifen mit this
cout << &m_value << this << endl;
}
So könnte ich doch den Wert ausgeben oder euler?
Die grundeinheit ist ja (m_exp)
.
Die kann ich ja einfach:
cout << exp endl; machen.
Als Bsp:
haben die das gegeben:
CMeasSeries@0012FE9C[50]:
leere Messreihe
CMeasSeries@0012FE9C[50]:
0: MeasValue@003467CC: 3.5*10^‐3 V
1: MeasValue@003467FC: 500*10^‐6 V
2: MeasValue@0034682C: 2.5*10^0 V
Maximalwert der Messreihe: MeasValue@0012FE6C: 2.5*10^0 V
Drücken Sie eine beliebige Taste . . .
Stimmt meine idee ein wenig?
|
|
08.12.2013 18:55 |
|
|
|
Die Ausgabe wird etwa so gehen:
code: |
1:
2:
3:
4:
5:
|
void CMeasSeries::print()
{
for(int i = 0; i < m_curValues; i++)
cout << *(m_values + i) << endl;
} |
|
kann es leider nicht testen, da das Einlesen bei mir noch nicht klappt.
Du brauchst auf jeden Fall einen Zeiger vom Typ CMeasValue (dann hat ein Objekt auch die Größe von 16 Byte, keine 8 wie bei double).
__________________ Syntax Highlighting fürs Board (Link)
|
|
08.12.2013 18:59 |
|
|
Jassy unregistriert
|
|
Meinst du es so euler:
Du brauchst auf jeden Fall einen Zeiger vom Typ CMeasValue (dann hat ein Objekt auch die Größe von 16 Byte, keine 8 wie bei double).
double *m_valueCMeasValue = new double;
müsste ich danach den Speicher nicht initialiesieren ?
So:
double * m_valueCMeasValue = new double[];
|
|
08.12.2013 19:05 |
|
|
|
Nein, kein double:
code: |
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:
32:
33:
34:
35:
|
CMeasSeries::CMeasSeries(string baseUnit, int maxValues)
{
if(maxValues > 0)
{
m_maxValues = maxValues;
m_baseUnit = baseUnit;
}
else
{
m_baseUnit = "";
maxValues = 10;
}
m_curValues = 0;
m_values = (CMeasValue*)malloc(m_maxValues * sizeof(CMeasValue));
}
CMeasSeries::~CMeasSeries()
{
free(m_values);
}
bool CMeasSeries::put(double value, int exp, string baseUnit)
{
if(m_curValues < m_maxValues)
{
cout << "m_values = " << m_values << endl;
cout << "m_values + m_curValues = " << m_values + m_curValues << endl;
cout << "m_values + 1 = " << &m_values[1] << endl;
m_values[m_curValues] = CMeasValue(value, exp, baseUnit);
cout << "didIt\n";
m_curValues++;
return true;
}
return false;
} |
|
Aber das funktioniert nicht.
Naja, vielleicht später, ich bin jetzt erst mal weg.
__________________ Syntax Highlighting fürs Board (Link)
|
|
08.12.2013 19:10 |
|
|
|