Pergunta

Eu usei-os em java e não parecia ter muitos problemas, mas eu não estou agarrando-los muito bem em C ++. A atribuição é:

Write a class named Car that has the following member variables:

    year. An int that holds the car's model year.
    make. A string that holds the make of the car.
    speed. An int that holds the car's current speed.

In addition, the class should have the following member functions.

    Constructor.  The constructor should accept the car's year and make 
        as arguments and assign these values to the object's year and 
        make member variables.  The constructor should initialize the 
        speed member variable to 0.

    Accessors.  Appropriate accessor functions should be created to allow 
        values to be retrieved from an object's year, make, and speed 
        member variables.

    accelerate.  The accelerate function should add 5 to the speed member 
        variable each time it is called.

    brake.  The brake function should subtract 5 from the speed member 
        variable each time it is called.

Demonstrate the class in a program that creates a Car object, and then 
    calls the accelerate function five times.  After each call to the 
    accelerate function, get the current speed of the car and display 
    it.  Then, call the brake function five times.  After each call to 
    the brake function, get the current speed of the car and display it.

Até agora, este é o que eu tenho, mas estou razoavelmente certo que estou completamente errado. Se alguém tem algum conselho que eu realmente aprecio isso, obrigado!

#include<iostream>
#include<string>

using namespace std;

class Car
{
    public:
        int year;
        string make;
        int speed;
    Car()
    {
        setYear(newYear);
        setMake(newMake);
        setSpeed(0);
    }

    void setYear(int newYear)
    {
        year = newYear;
    }
    void setMake(string newMake)
    {
        make = newMake;
    }
    int getYear()
    {
        return year;
    }
    string getMake()
    {
        return make;
    }
    int accelerate(int speed)
    {
        return (speed+5);
    }
    int brake(int speed)
    {
        return (speed-5);
    }
};

int main()
{
    return 0;
}

PS: O principal tem return 0; puramente como um local reservado apenas tentando entender o todo "get e set" coisa.

Foi útil?

Solução

Geralmente seus / funções definidas get deve funcionar bem. Alguns outros comentários:

  • O year, make e speed variáveis ??provavelmente deve ser privada, senão não haveria realmente qualquer necessidade de ter obter funções / SET para eles desde que as variáveis ??poderia muito bem ser alterado diretamente.
  • Provavelmente não deve haver nenhum set-funções em tudo. Eu não acho que ele está destinado a ser possível mudança do year ou make ou definir o speed diretamente.
  • O construtor deve tomar newYear e newMake como parâmetros.
  • accelerate() e break() deve alterar o speed salvos no objeto carro, não apenas retornar um valor diferente de speed.
  • using namespace std; pode importar lotes de nomes inesperados para o namespace global e muitas vezes é preferível usar nomes explicitamente qualificados como std::string vez.

Outras dicas

Alguns problemas que vejo:

Você está se referindo a variáveis ??no construtor que não foram passados ??para o construtor (newYear, newMake)

funções

O accelerate e decelerate não modificar qualquer estado; eles simplesmente somar e subtrair 5 a partir de uma velocidade que é passado em - Eu não acho que eles deveriam se comportar dessa maneira. Note-se que a descrição do problema diz que eles adicionar / subtrair da speed variável de membro .

Todas as suas variáveis ??de membro são públicos. Você faria isso em Java?

Você provavelmente vai querer fazer as variáveis ??internas privado, uma vez que só deve ser atualizado por métodos dentro da classe. Em segundo lugar, você precisa de parâmetros para o construtor para que você possa definir o ano e fazer inicialmente.

Ex:

public: Car(int newYear, string newMake) {...}

class Car
{
private:
        int year;
        string make;
        int speed;
public:
    Car(int newYear, string newMake)
    {
        setYear(newYear);
        setMake(newMake);
        setSpeed(0);
    }
    ...
}

Você também não estão atualizando os valores de velocidade em seus accelerate e brake métodos. Tente:

return (speed -=5);

ou

return (speed += 5);

As funções accelerate() e brake() deve operar sobre o membro speed em vez de apenas retornar o valor modificado. Este significa atribuir a speed conforme o caso.

Além disso, os membros que têm assessores são normalmente feitas private ou protected em vez de ser pública esquerda.

O método getter e Setter é usada para conseguir o encapsulamento de dados, de modo que apenas os membros da classe pode membros de dados única de acesso da classe.

Vários comentários:

  1. As suas variáveis ??de membro deve ser privada , não público como tornando-breaks públicas encapsulamento e derrota o propósito de acessá-los usando acessor (getter / setter) funções.
  2. Seus nomes de funções e parâmetros da função de sombra os nomes de suas variáveis ??associadas, que está levando a algumas das confusões. Assim como em Java, onde você precisa usar this.x para distinguir a variável de membro "x" do parâmetro "x", da mesma forma que você precisa para uso this->x. No entanto, isso pode ser evitado se você sempre dar suas variáveis ??de membro de algum tipo de prefixo. Duas convenções comuns são a variáveis ??membro prefixo com um sublinhado (por exemplo, o nome do seu _speed variável membro e utilização speed como o nome de um parâmetro) ou a utilização de um 'm' (para "membro") seguido por um sublinhado.
  3. Qualquer função que não modifica os dados - ou seja, todas as suas funções "getter" - deve ser declarada com a palavra-chave const , de modo que estes dados podem ser acessados ??a partir de um const Car ou const Car&. Por exemplo, o uso int getSpeed()const vez de int getSpeed() declará-la constante.
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top