Ihr Konstruktor RouteTaxi() ist ein Standardkonstruktor. Es muss ein gültiges Objekt ohne diese erstellen, so dass Sie akzeptable Standardwerte haben müssten.
Es gibt keine gute Möglichkeit, eine Standardroute zu machen, es sei denn, Sie eine „nirgendwo“ Route mit einem „Nocar“ Auto haben, so können Sie stattdessen diese Argumente im Konstruktor, wie in diesem Beispiel benötigen:
#include<string>
using std::string;
class Car {
public:
Car(string cbrand, string cmodel, int cyears, int cseatingCapacity, double cloadCapacity, double cfuelConsumption){}
};
class Route {
public:
Route(string rnodes, double rrouteLength, int rtoursPerDay){}
};
class RouteTaxi
{
private:
int id;
public:
Car car;
Route route;
RouteTaxi(string cbrand, string cmodel, int cyears, int
cseatingCapacity, double cloadCapacity, double cfuelConsumption,
string rnodes, double rrouteLength, int rtoursPerDay, int i)
: car(cbrand, cmodel, cyears, cseatingCapacity, cloadCapacity, cfuelConsumption),
route(rnodes, rrouteLength, rtoursPerDay),
id(i)
{}
static RouteTaxi generate_from_console_input();
};
// this is a factory function (class static member of RouteTaxi)
RouteTaxi RouteTaxi::generate_from_console_input() {
// input from console
string cbrand, cmodel, rnodes;
int cyears, cseatingCapacity, rtoursPerDay, i;
double cloadCapacity, cfuelConsuption, rrouteLength;
// return the object
// this is an error, using uninitialized data, simply because I am not actually getting the data from the console. You will do that, so it will not be a problem.
return RouteTaxi(cbrand, cmodel, cyears, cseatingCapacity, cloadCapacity, cfuelConsuption, rnodes, rrouteLength, rtoursPerDay, i);
}
Beachten Sie die Doppelpunkt- und Initialisierungsliste, die der Konstruktor zum Initialisieren anderer Objekte verwendet, bevor er seinen eigenen Konstruktorhauptteil ausführt. http://en.cppreference.com/w/cpp/language/initializer_list
Der Fabrikgenerator ist eine andere Möglichkeit, Objekte zu erstellen. Sie benötigen alle Informationen, bevor Sie den eigentlichen Konstruktor aufrufen, also ... schreiben Sie eine Funktion, die es bekommt, bevor Sie den Konstruktor tatsächlich aufrufen.
Dies ist ein bekanntes Design-Muster. Siehe https://en.wikipedia.org/wiki/Creational_pattern. Obwohl diese viel detaillierter sind. Sie haben es nicht mit vielen verschiedenen Arten von RouteTaxi und Unterklassen zu tun.
Danke. Ich habe diesen Konstruktor. Mein Problem ist, dass ich später möchte, dass mein Objekt von der Konsole aus berechnet und auf Fehler überprüft wird, ich möchte nicht, dass es statisch ist. Tut mir leid, wenn ich keinen Sinn mache. –
Vielleicht möchten Sie eine Fabrik Generator-Funktion. Lass mich das hinzufügen. –
Vielen Dank für Ihre Zeit! –