2017-05-19 3 views
-6

unter mein Code:Wie schreibe ich die Kopie Konstruktor für Komposition?

class Pulley{ 
private: 
    int noOfTeeth; 

public: 
    Pulley(); 
    Pulley(int teeth); 
    ~Pulley(); 

    void show(); 
}; 

Pulley::Pulley() 
{ 
    cout << "Pulley constructor called!"; 
    noOfTeeth = 0; 
} 

Pulley::Pulley(int teeth) 
{ 
    cout << "Pulley constructor called!"; 
    noOfTeeth = teeth; 
} 

void Pulley::show() 
{ 
    cout << "\n\nNo of Teeths of Pulley: " << noOfTeeth; 
} 

Pulley::~Pulley() 
{ 

} 

class GearBox{ 
    private: 
    char *transmission; 
    Pulley p; 

    public: 
    GearBox(); 
    GearBox(char *trans, int pTeeth); 
    ~GearBox(); 

    void show(); 
}; 

GearBox::GearBox(): p() 
{ 
    cout << "Gearbox constructor called!"; 
    transmission = NULL; 
} 

GearBox::GearBox(char *trans, int pTeeth): p(pTeeth) 
{ 
    cout << "Gearbox constructor called!"; 
    if(trans != NULL) 
    { 
     transmission = new char[strlen(trans)+1]; 
     strcpy(transmission, trans); 
    } 
    else 
    { 
     transmission = NULL; 
    } 
} 

void GearBox::show() 
{ 
    cout << "\n\nTransmission of vehicle: " << transmission; 
    p.show(); 
} 

GearBox::~GearBox() 
{ 

} 

class Vehicle{ 
private: 
    char *model; 
    char *color; 
    GearBox g; 

public: 
    Vehicle(); 
    Vehicle(char *mod, char *col, char *gr); 
    Vehicle(const Vehicle &vh); 
    ~Vehicle(); 

    void show(); 
}; 

Vehicle::Vehicle(): g() 
{ 
    cout << "Vehicle constructor called!"; 
    model = NULL; 
    color = NULL; 
} 

Vehicle::Vehicle(char *mod, char *col, char *gr): g(gr) 
{ 
    cout << "Vehicle constructor called!"; 
    if(mod != NULL) 
    { 
     model = new char[strlen(mod)+1]; 
     strcpy(model, mod); 
    } 
    else 
    { 
     model = NULL; 
    } 

    if(col != NULL) 
    { 
     color = new char[strlen(col)+1]; 
     strcpy(color, col); 
    } 
    else 
    { 
     color = NULL; 
    } 
} 

void Vehicle::show() 
{ 
    cout << "\n\nModel of Vehicle: " << model; 
    cout << "\n\nColor of Vehicle: " << color; 
    g.show(); 
} 

int main() 
{ 
    Pulley p(20); 
    GearBox g("Manual", p); 
    Vehicle V("Honda", "Black", g); 
    V.show(); 
    system("PAUSE"); 
} 

Nun, wenn ich diesen Code ausführen bekomme ich eine Menge Fehler, ich weiß nicht, was sind die, und wie sie zu lösen. Der einzige Fehler, den ich verstanden habe, ist von Copy Constructor, also kann mir jemand erklären, wie ich den Kopierkonstruktor für Zeiger auf Zeichen transmission, model and color schreiben kann. Sagen Sie mir auch, wie ich andere Fehler beheben kann. Danke vielmals.

+6

Wenn Sie Code schreiben, mit etwas klein und einfach beginnen, die perfekt funktioniert, dann Komplexität ein wenig in einer Zeit hinzuzufügen. Wenn Sie viele Fehler mit so viel Code haben, liegt das daran, dass Sie sie nicht so behandelt haben, wie sie entstanden sind. ** Niemals Code hinzufügen, der nicht funktioniert. ** Ich schlage vor, dass Sie diesen Code so weit wie möglich vereinfachen und trotzdem einige Fehler bekommen. Sie können feststellen, dass die Fehler offensichtlich werden, ansonsten können Sie ein einfacheres Beispiel veröffentlichen. – Beta

+0

Wenn Sie Strings speichern, verwenden Sie std :: string. Schreiben Sie keine Destruktoren oder Kopieroperatoren. Delegieren Sie zu std :: string, std :: vector, std :: unique_ptr usw. –

+0

_Now, wenn ich diesen Code ausführen, bekomme ich eine Menge Fehler, ich weiß nicht, was diese sind und wie sie gelöst werden ._ Von Diese Aussage ist unklar, wenn Sie Kompilierungsfehler (wenn ja, was sind diese Fehler?) oder Ihren Code in der Laufzeit fehlgeschlagen (wenn ja, haben Sie versucht, mit einem Debugger durch den Code zu gehen, um herauszufinden, warum es fehlgeschlagen?). –

Antwort

-4

Versuchen wie folgt aus:

#include <string> 
#include <iostream> 

class Pulley{ 
private: 
    int noOfTeeth; 

public: 
    Pulley(int teeth = 0); 

    void show(); 
}; 

Pulley::Pulley(int teeth) 
: noOfTeeth(teeth) 
{ 
    std::cout << "Pulley constructor called!"; 
} 

void Pulley::show() 
{ 
    std::cout << "\n\nNo of Teeths of Pulley: " << noOfTeeth; 
} 

class GearBox{ 
    private: 
    std::string transmission; 
    Pulley p; 

    public: 
    GearBox(std::string trans = std::string(), Pulley p = Pulley()); 

    void show(); 
}; 

GearBox::GearBox(std::string trans, Pulley p) 
: transmission(std::move(trans)) 
, p(std::move(p)) 
{ 
    std::cout << "Gearbox constructor called!"; 
} 

void GearBox::show() 
{ 
    std::cout << "\n\nTransmission of vehicle: " << transmission; 
    p.show(); 
} 

class Vehicle{ 
private: 
    std::string model; 
    std::string color; 
    GearBox g; 

public: 
    Vehicle(); 
    Vehicle(std::string mod = "", std::string col = "", GearBox gr = GearBox()); 

    void show(); 
}; 

Vehicle::Vehicle(std::string mod,std::string col, GearBox gr) 
: model(std::move(mod)) 
, color(std::move(col)) 
, g(std::move(gr)) 
{ 
    std::cout << "Vehicle constructor called!"; 
} 

void Vehicle::show() 
{ 
    std::cout << "\n\nModel of Vehicle: " << model; 
    std::cout << "\n\nColor of Vehicle: " << color; 
    g.show(); 
} 

int main() 
{ 
    Pulley p(20); 
    GearBox g("Manual", p); 
    Vehicle V("Honda", "Black", g); 
    V.show(); 
// system("PAUSE"); 
} 
+2

Ich würde diese Antwort als unvollständig betrachten. Es zeigt nicht an, welche Änderungen vorgenommen wurden, noch erklärt es den Grund dafür. –

+1

Kannst du meine Hausaufgaben machen, ohne mir etwas beizubringen? –

+0

Es wurde geschrieben, um auf einen Kommentar zu erweitern –

Verwandte Themen