Wenn Sie eine Klasse für Ihr Programm entwerfen, sei es für Hausaufgaben oder für eine reale Produktionsanwendung, möchten Sie immer darüber nachdenken, wie diese Klasse verwendet wird und wie ihre Verantwortlichkeiten aussehen sollten. Jede Funktion und Methode sollte eine Sache / Aufgabe erfüllen und sich im Namen der Methode widerspiegeln. Darüber hinaus möchten Sie einen konsistenten, leicht lesbaren Codierstil beibehalten, wenn Sie tatsächlich mit dem Schreiben des Codes beginnen. Im Hinblick auf diese beiden Punkte sind im Code einige Punkte zu beachten:
-
Distance::distanceSum
macht hier zwei Aufgaben.
Es summiert nicht nur Fuß und Zoll, sondern druckt sie auch aus.
- Unnötige Typkonvertierung
In Ihrem standardmäßigen Distance () -Cor gibt es eine implizite Konvertierung, da Sie 0
einem Float-Typ zuweisen . Sie sollten eine Warnung von Ihrem Compiler erhalten haben. Erwägen Sie die Verwendung einer Initialisierungsliste wie folgt:
Distance::Distance() : feet(0), inch(0.0)
{
}
- Code nutzt die const-Richtigkeit nicht aus.
Welche Parameter ändern sich nicht? Welche Methoden werden Ihre Distance-Klasse ändern? Zum Beispiel Distance::Distance(int a,float b)
ändert sich nicht a
oder b
. Lassen Sie den Compiler dieses Versprechen mit const erzwingen:
Distance::Distance(const int a, const float b)
Ähnlich:
void Distance::distanceSum(const Distance &d);
- Inkonsistente Einrückung und Abstand.
Betrachten Sie die Einrückung der Methoden unter public: genauso wie bei private :. Fügen Sie Ihren Zuweisungen Leerzeichen hinzu, um die Lesbarkeit zu verbessern. z.B.feet = a;
- Keine Modultrennung nach Datei.
Die Klasse Distance
sollte sich wahrscheinlich in einer separaten Header- / Implementierungsdatei befinden, anstatt alles in einer Hauptdatei abzulegen.
- Ninja-Kommentare
Bemerkungen? Welche kommentare Genau. Fügen Sie am Anfang Ihrer Distance-Klasse einen Blockkommentar hinzu, der den Zweck seiner Existenz erläutert. Der Blockkommentar sollte Fragen beantworten, wie diese Klasse verwendet werden soll und welche Details abstrahiert sie? Hinzufügen eines Kommentars, um zu erläutern, wie die Datenelemente für Fuß und Zoll verwendet werden. Es ist zum Beispiel nicht klar, ob Ihre Abstandsklasse die gleiche Abstandsmessung hat, jedoch mit unterschiedlichen Einheiten oder wirklich als eine ganze Einheit verwendet werden soll. z.B. 6 Fuß 2 Zoll oder 6 Fuß 72 Zoll?
Mit den obigen Überlegungen möchte ich den Code so umgestalten:
In der Datei distance.h:
#ifndef DISTANCE_H
#define DISTANCE_H
class Distance
{
private:
// feet and inch is one unit.
// invariant: inch_ < 12.
int feet_;
float inch_;
public:
Distance(const int feet = 0, const float inches = 0.0);
void setDistance(const int feet, const float inches = 0.0);
int getFeet() const;
float getInch() const;
// returns this instance. Permits method chaining for Distance class.
Distance& Add(const Distance &d);
};
#endif
In der distance.cpp-Implementierung:
#include "distance.h"
Distance::Distance(const int feet, const float inches)
: feet_(feet + inches / 12), inch_(inches % 12)
{
}
void Distance::setDistance(const int feet, const float inches)
{
feet_ = feet + inches / 12;
inch_ = inches % 12;
}
int Distance::getFeet() const
{
return feet_;
}
float Distance::getInch() const
{
return inch_;
}
Distance& Distance::Add(const Distance &d)
{
setDistance(getFeet() + d.getFeet(), getInch() + d.getInch());
return *this;
}
Hier sind die wichtigsten Änderungen oben:
- Distance verwendet Cin / Cout nicht mehr für explizite IO. Sie können diesen Code in main eingeben.
- Klassendefinition und Implementierung befinden sich jetzt in ihren jeweils benannten Dateien.
- Eine zusätzliche Konstruktordefinition wurde unter Verwendung der Standardparameter entfernt.
- Datenelemente in Fuß und Zoll werden zusammen verwendet, um die Messung in der Entfernung darzustellen. Zoll kann nicht> 12 sein, da dies für einen Fuß ausreichend wäre. Wir erzwingen dies, indem wir beim Einstellen der Entfernungsangaben Fuß und Zoll durch 12 teilen.
- const wird verwendet, um eindeutig anzugeben, was das Entfernungsobjekt ändern kann und nicht.
-
DistanceSum wurde in Add geändert, um besser anzuzeigen, was es tut. Beachten Sie, dass hinzufügen nur durch öffentliche Methoden Entfernung des umgesetzt - es nicht manipulieren
feet_
undinch_
direkt.