K
volkard schrieb:
Bogenschuetze.cpp:
#include "Bogenschuetze.h"
schade dabei bin ich gerade erst auf .hpp statt .h umgestiegen.
Hab das jetz mal Probehalber auf hpp umgestellt. Sollte zeitgemäßer sein.
volkard schrieb:
// TODO: Hier die interessanten Methoden implementieren.
auch schade. muss ich ja jedesmal löschen, wenn ich die datei erzeugt hab.
Ist auch ein gutes Argument
volkard schrieb:
// Die Konstruktoren, Selektoren und Operatoren wurden bereits inline in .h implementiert.
was sind selektoren? das, was anderer inspektoren nennen? oder eher grantopalen? aus dem threadverlauf erntnehme ich, daß es getter sein könnten?
Hmm. Getter... Klingt mekrwürdig. Aber es läuft auf die Get*/Set* Methoden hinaus.
volkard schrieb:
und ein fehler. kein newline am dateiende. da spinnen manche compiler.
Done
volkard schrieb:
Bogenschuetze.h:
/**
* Landeinheit mit Fernkampfwaffe.
* Datei: Bogenschuetze.h
* Author: Volkard Henkel
* Version: 0.01
* Ein Bogensch³tze trõgt eine Waffe, die ³ber lõngere Distanzen angreifen kann. Er ist typischerweise schwach gepanzert. Im Nahkampf ist er ne Flasche.
*/
dateiname ist doof. man hat die datei doch eh unter diesem namen im filesystem. autor schreibt man ohne h. versionsmanagement auf dateibasis ist etwas übertrieben. wer macht denn das (und noch dazu per hand)? aber du gibst hier ein versprechen ab. wenn die versionsnummer gleich ist, ist die semantik des interfaces gleich.
Mit Ausnahme des Authors gehen die Meinungen dahingehend anscheinander auseinander. Ich habe versucht mich möglichst an diese Quelle zu halten.
volkard schrieb:
der kurzkommentar und der langkommentar bringen hier nur ganz extrem selten was. normalerweise sagt der klassenname alles. also lass die kommentare weg, in den seltenen fällen, daß da was hin muss, kann der user sich was hinschreiben. also ich halte es nicht für praktischer, am anfang den kommentar in das formular einzugeben als nachher oder mittendrin ihn in die datei zu schreiben.
Hmm. Man muss ja die Header-Kommentare nicht aktivieren, oder meinst du was anderes?
volkard schrieb:
warum kommentare in /**/ statt in // ?
Bin ich von Java so gewohnt. Finde ich irgendwie schöner und wird durch Doxygen unterstützt
volkard schrieb:
/// DEFINITION /////////////////////////////////////////////
naja. nutzloser kommentar.
mach außerdem so /////-streifen genau 80 zeichen breit.
Hast bezüglich dieser Kommentare wohl recht. Hab zuletzt zuviel Lamothe gelesen.
volkard schrieb:
#ifndef BOGENSCHUETZE
#define BOGENSCHUETZE
der #include-guard gehört ganz oben hin. zum einen bringt es ein mikro mehr speed beim compilieren, zum anderenhilft es dummen compilern, das als includeguard zu erkennen..
Done
volkard schrieb:
#include \"NoCopy.hpp\"
fehlerchen gemacht bei den tüddelchen.[/cpp]
Gut. "Korrigiert". Ab jetzt ohne Anführungszeichen eingeben.
[quote="volkard"]
#include <string>
erste sinnvolle zeile. [/cpp]
Vielen Dank *fg*
volkard schrieb:
using namespace std;
den knopf kannste wegmachen. man soll nie using namespace in einen header schreiben.
Weil?
volkard schrieb:
class Bogenschuetze
{
nicht mein bracing style.
Hmm. War meiner bis vor kurzem auch nicht. Kann dem aber was abgewinnen
Ausserdem kann ich's wenn es um den Stil geht sowieso nicht jedem Recht machen
volkard schrieb:
private:
du musst mit tabs einrücken. leerzeichen passen zu keiner IDE, außer ich hab zufällig mal die tabsize so eingestellt wie du. tabs gehen immer.
Done (Glaub ich. Mein PHP-Editor macht da gerade beim betrachten der Dateien keine(?) Unterschiede
volkard schrieb:
string m_sName;
ungarische notation ist sowas von tot, biete den kopf besser nicht an.
Weil?
[quote="volkard"]
int m_iMinAngriffsDistanz;
int m_iMaxAngriffsDistanz;
manchmal brauchen attribute kommentare. danke, daß du die nicht auch schreiben willst. [/cpp]
Zynisch geworden oder verstehe ich den Sinn nur nicht?
volkard schrieb:
Bogenschuetze()
{
m_sName = "";
m_iMinAngriffsDistanz = 0;
m_iMaxAngriffsDistanz = 0;
}
nicht ideal.
der einzig sinnvolle konstruktor, den du bauen darfst, ist
Bogenschuetze(const Bogenschuetze& rhs)
m_sName = rhs.getName();
m_iMinAngriffsDistanz = rhs.getMinAngriffsDistanz();
m_iMaxAngriffsDistanz = rhs.getMaxAngriffsDistanz();
}
[cpp]
Hmm. Ich verstehe trotzdem nicht so ganz was dagegen spricht, zumal ich es als nützlich empfinde meine Objekte auf alle mögliche Arten konstruieren zu können. Wäre nett wenn du das auch mal kurz anreissen könntest
volkard schrieb:
konntest copy&swap benutzen.
ah, und swap könntest du einbauen.
Öhm. Wenn ich wüsste was es wäre würde ich das vielleicht tun
volkard schrieb:
Bogenschuetze(string name, int minangriffsdistanz, int maxangriffsdistanz)
{
m_sName = name;
m_iMinAngriffsDistanz = minangriffsdistanz;
m_iMaxAngriffsDistanz = maxangriffsdistanz;
}
der ist praktisch.
Danke. Finde ich auch
volkard schrieb:
ich bezweifle, daß getter und setter oft genug gebraucht werden.
Hmm. Wann ist "oft genug"? Könnte man allerdings auch optional machen. Stimmt schon.
volkard schrieb:
};#endif
manche schreiben gerne
}; #endif //BOGENSCHUETZE
und statt BOGENSCHUETZE vielleicht BOGENSCHUETZE_H, damit es keine kollision mit nem makro gibt.
Done
volkard schrieb:
es wäre gut, wenn du noch nen knopf einbauen würdest "diese einstellungen merken" und daß du die einstellungen als cookie speicherst. dann kannste auch noch ein paar mehr features einbauen.
- tabs statt spaces. (bei mir an)
- anderer bracing stype. (bei mir an)
- the big three. (bei mir normalerweise aus)
- getter/setter. (bei mir normalerweise aus)
- kopieren verboten. (bei mir an)
- .hpp statt .h. (bei mir an)
- kommentar autor. (bei mir aus)
- licence-text. (ganzen string in den cookie rein!)
- zusätzlicher button "GPL in das licence-textfeld kopieren"
- zusätzlicher button "LGPL in das licence-textfeld kopieren"
- kommetar version. (bei mir aus)
- kommetar dateiname. (bei mir aus)
- kommentar klassenbeschreibung. (bei mir meistens aus)
- basisklasse
- attribute am ende statt am anfang
- struct statt class (was automatisch keine getter/setter baut)
Ich hab mir den obigen Teil mal ausgedruckt. Ein paar Sachen finde ich zwar nicht unbedingt nützlich aber i.A. sind da viele nette Ideen bei
volkard schrieb:
recht gut bewäht bei mir hat sich ein lokales tool, daß nur den klassennamen abfragt und anhand eines templates (wortbedeutung wie bei php) die *.h und *.cpp baut. so ein template für *.h sah so aus:
#ifndef CLASS_H__UID
#define CLASS_H__UID
#pragma once
////////////////////////////////////////////////////////////////////////////////
// Copyright (c) 2004, Volkard Henkel
#include "NoCopy.h"
class Class
{
NOCOPY;
private:
CURSOR
public:
};
#endif//CLASS_H__UID
dabei hat der assi Class ersetzt zum eingegebenen Klassennamen und CLASS zum KLASSENNAMEN und UID war ne lange zufallszeichenfolge. und die ide war so nett, den corsor auch dahinzusetzen, woe CURSOR stand.
normalerweise fange ich damit an, die attribute hinzuschreiben. und da ich selten getter/setter habe, kann ich die auch einfach in den code schreiben.
Boah. ächtz
Vielen Dank dafür Dir so viel Zeit für die Auseinandersetzung mit meinem Projekt genommen zu haben. Ich habe einige Vorschläge von dir bereits auf meinem Server umgesetzt und werde dem im Laufe des tage noch einiges zufügen und dann die öffentliche Version aktualisieren.