003
24.03.2004, 10:57 Uhr
ao
(Operator)
|
| Zitat: |
kronos postete 1. ist es normal, dass der compiler nicht merkt wenn ich in der methode einer klasse ein symbol verwende, dass es gar nicht gibt? er könnte doch feststellen ob es global, in der klasse oder in der methode selbst definiert ist?
|
Symbole, die es nicht gibt, führen immer zu einem "undefined symbol"-Compilerfehler. Wenn du meinst, ein Gegenbeispiel zu haben, dann zeig mal den Code.
| Zitat: |
2. ich habe eine klasse A. diese enthält einen int X und einen array/vektor mit mehreren klassen B. jede klasse B sollte nun auf X zugreifen können. also, nicht vererbt sondern das selbe X, wenn klasse a den X ändert, soll B das mitbekommen. wie lässt sich das am besten realisieren? kann man irgendwie referenzen vererben oder so? (B kann, muss aber keine ableitung von A sein)
|
Ich lass das mit dem B-Vektor in A mal weg und nehme nur ein einzelnes B. Ist einfacher, aber im Prinzip das gleiche. Also etwa so:
| C++: |
class B { int & m_rnX; // Referenz auf externes X };
class A { int m_nX; B m_bB; };
|
Und jetzt soll das m_nB in A das m_nX kennen? Realisieren könnte man das über geeignete Konstruktoren:
| C++: |
B::B (int & rnX) : m_rnX (rnX) {} A::A () : m_bB (m_nX) {}
|
Aber ich finde, es riecht nach Designfehler. Es ist immer verdächtig, wenn eine Klasse die Innereien der anderen kennen muss. Was soll denn das werden?
Wenn B kein Member von A, sondern von A abgeleitet ist, kennt es automatisch auch die Member von A (außer die privaten). Dann ist das Ganze eh kein Thema.
| Zitat: |
3. ich möchte zeichenfolgen datenbank-artig speichern. würdet ihr einen std::string-vektor oder einen char*-vektor verwenden? wenn ich frisst string in diesem fall deutlich mehr resourcen?
|
Ich würde so viel wie möglich fertige Klassen nehmen, einfach weil da die meisten Fehler schon raus sind. Und Zeichenketten-Verwaltung über char*-Arrays ist sehr fehlerträchtig. Um Räder neu zu erfinden, die es schon gibt, braucht man einen sehr guten Grund.
Und die STL-Klassen sind meist gut optimiert, so dass es schwierig sein dürfte, sie bezüglich Resourcenverbrauch zu toppen.
Etwas anderes ist es, wenn du eine String-Klasse schreiben willst, um zu verstehen, wie es geht. Das ist natürlich immer erlaubt.
| Zitat: |
4. eine frage zum stil: sollte ich C/C++ strikt trennen, oder verwendet man auch in C++-projekten libc-funktionen? ich finde z.b. printf oft einfach praktischer als std::cout gemurkse...
|
Es spricht nichts dagegen, libc-Funktionen in C++-Quellcode zu verwenden. Vorsicht aber beim Mischen beider Welten. Abwechselndes Verwenden von printf und cout kann überraschende Wirkungen haben.
ao |