Écrivez un programme C++ qui crée une classe de véhicule et dérive les classes de voiture et de vélo à partir de la classe de véhicule. Toutes les classes doivent avoir des constructeurs et une méthode appropriés pour afficher les détails du véhicule.

la programmation


Est-ce le programme de solution approprié à la question, sinon quels changements doivent être apportés, veuillez le dire.

Ce programme affiche 2 erreurs, pourquoi ?
erreur : le champ « myVehicle » contient un type de véhicule incomplet [9]

remarque : la définition de « véhicule de classe » n’est pas complète avant l’accolade fermante
Dans la fonction membre ‘void Vehicle::valid_mileage (int)’
erreur : une définition de fonction n’est pas autorisée ici avant le jeton ‘{‘

Ce que j’ai essayé :

#ifndef VEHICLE_H
#define VEHICLE_H

#include <iostream>
#include <fstream>
#include <iomanip>
#include <functional>
#include <algorithm>
#include <string>
#include <cstdlib>
#include <sstream>
using namespace std;

//Vehicle Class
class Vehicle {
protected:
	Vehicle myVehicle[9];
	string make;  //make
    string model; // model
    string color;  // color
    int	year;  // year
    int mileage;  // miles on car
	string type;  //Type of vehicle

public:
	//Constructor that will set information for a new car
	void New_vehicle (string a, string b, string c, int d, int e) 
	{make = a; model = b; color = c; year = d; mileage = e;}
	
	Vehicle(); //Default constructor
	Vehicle(string, string, string, int, int, string);
	//mutator and accessor functions
	void setMake(string);
    void setModel(string);
    void setColor(string);
    void setYear(int);
    void setMileage(int);
	void setType(string);

    string getMake();
    string getModel();
    string getColor();
    int getYear();
    int getMileage();
	string getType();

	//Check mileage to see if valid
	void valid_mileage(int);

	//virtual function
	virtual void details() {
	}

};
//Sets to default values
Vehicle::Vehicle() {
	make = " ";
    model = " ";
    color = " ";
    year = 0;
    mileage = 0;
	type = " ";
}

Vehicle::Vehicle(string make, string model, string color, int year, int mileage, string type) {
    Vehicle::make =  make;
    Vehicle::model = model;
    Vehicle::color = color;
    Vehicle::year = year;
    valid_mileage(mileage);
	Vehicle::type = type;
}

void Vehicle::setMake(string make) {
    Vehicle::make = make;
}

void Vehicle::setModel(string model) {
    Vehicle::model = model;
}

void Vehicle::setColor(string color) {
    Vehicle::color = color;
}

void Vehicle::setYear(int year) {
    Vehicle::year = year;
}

void Vehicle::setMileage(int mileage) {
    valid_mileage(mileage);
}

void Vehicle::setType(string type) {
	Vehicle::type = type;
}


string Vehicle::getMake() {
    return make;
}
string Vehicle::getModel() {
    return model;
}
string Vehicle::getColor() {
    return color;
}
int Vehicle::getYear() {
    return year;
}
int Vehicle::getMileage() {
    return mileage;
}

string Vehicle::getType() {
	return type;
}


void Vehicle::valid_mileage(int mileage) {
    if (mileage>=0)
        Vehicle::mileage=mileage;
    else {
        Vehicle::mileage=0;
        cout << "WARNING! You have entered invalid mileage!\n";
    }

	    Vehicle& getVehicle(int n) {
        return myVehicle[n];
    }
};

#endif 

Solution 1

Vous avez des accolades fermantes parasites et manquantes.
Il y en a un supplémentaire après la définition de detailsil en manque à la fin de valid_mileageet ainsi de suite.

C’est l’une des raisons pour lesquelles je déteste le système 1 To : il est beaucoup plus difficile de faire correspondre les supports lorsqu’ils sont au mauvais endroit, car l’indentation automatique ne fonctionne pas…

Solution 2

Citation:

Est-ce le bon programme de solution à la question

Non, ce n’est pas la solution : vous fournissez uniquement le Vehicle classe, vous devez également fournir à la fois le Car et le Bike classe.

De plus, quel est le but de la gamme de Vehicles dans le Vehicle classe? Quel est le but du type membre de données ?

Essayez de limiter le nombre de détails au minimum et de fournir la hiérarchie de classes requise.

Solution 3

La première erreur provient d’ici :

class Vehicle {
protected:
    Vehicle myVehicle[9];
// ...
};

Vous ne pouvez pas utiliser une instance de classe en tant que membre de sa propre classe.

error:field 'myVehicle' has incomplete type vehicle [9]
note: definition of 'class vehicle' is not complete until closing brace

La classe n’est pas définie à ce stade, de sorte que le compilateur ne sait pas comment la gérer.

La deuxième erreur provient du bloc de code

C++
Vehicle& getVehicle(int n) {
    return myVehicle[n];
}

dans ton valid_mileage() fonction. Il semble qu’il ait été copié et collé au mauvais endroit.

Notez également que :: est l’opérateur de résolution de portée pour les espaces de noms et pour accéder aux membres statiques d’une classe. Pour accéder aux membres non statiques d’une classe lorsque le nom du membre est également utilisé comme paramètre, utilisez le ce pointeur – cppreference.com[^]:

C++
void Vehicle::setMake(string make) {
    this->make = make;
}

Solution 6

Voiture de classe de base
Classe dérivée
Ferrari : Vitesse 10 000 km/h
Honda : Vitesse 10 200 km/h
Toyota : Vitesse 15 000 km/h

Solution 7

Voiture de classe de base
Classe dérivée
Vitesse Ferrari 10 000 km/h
Vitesse Honda 10200 km/h
Vitesse Toyota 15 000 km/h

コメント

タイトルとURLをコピーしました