0
#include<iostream>
#include <string>
using namespace std;


class Car{
private: 

public: Car(int, string, int);
    Car(){}  //default constructor 
    void setbrake();
    void setacc();
    int year,speed;
     string make;

};


Car::Car(int year, string make, int speed = 0) //constructor with parameters
{ 
cout << "Enter your car's year." << endl;
cin >> year;
cout << "Enter your car's make. " << endl;
cin >> make;
cin.ignore();
speed = 0; }

void Car::setbrake(){  //first function
    speed = speed - 5;
    cout << "Your " << make << " is traveling at " << speed;
    cout << " MPH.";}

void Car::setacc(){   //second function
    speed = speed + 5;
    cout << "Your " << make << " is traveling at " << speed;
    cout << " MPH.";}




int main()
{
Car car1(0,"s");
cout << car1.make;
cout << car1.speed;
cout << car1.year;
car1.setacc();



system("pause");
return 0;
}

我在让我的变量显示在我的两个成员函数中时遇到问题,并且它在 main.js 中不显示任何内容。速度变量总是出现 49898575 <-- 一些像这样的随机高数字,我假设我将它初始化为 0。我整个星期都被困在这个问题上。如何连接我的类私有变量和我的成员函数。我认为我的带参数的构造函数会解决这个问题,但显然不是。有人可以花时间为我批评这段代码。我要把头发拔出来。

这是分配给类的问题,这就是我的目标,但我没有关注类和成员函数,以及它们如何协同工作。

编写一个名为 Car 的类,该类具有以下成员变量: • year。保存汽车型号年份的 int。

• 制作。一根绳子,上面印着汽车的品牌。

• 速度。保存汽车当前速度的 int。

此外,该类应具有以下成员函数。

• 构造函数。构造函数应该接受汽车的年份和 make 作为参数,并将这些值分配给对象的年份和成员变量。构造函数应该将 speed 成员变量初始化为 0。

• 访问器。应创建适当的访问器函数以允许从对象的年份、品牌和速度成员变量中检索值。

• 加速。每次调用时,加速函数都应将 speed 成员变量加 5。

• 刹车。每次调用刹车函数时,它都应该从速度成员变量中减去 5。

在创建 Car 对象的程序中演示该类,然后调用加速函数五次。每次调用加速函数后,获取汽车的当前速度并显示出来。

然后,调用五次刹车功能。

每次调用刹车函数后,获取汽车的当前速度并显示出来。

4

1 回答 1

1

您正在更改参数的值,这会影响您的成员,使两个整数都未初始化(字符串将为空字符串)。

更好的选择是使用不同的名称:

Car::Car(int y, string m, int s = 0)

但是,您可以使用this

this->speed = 0;

不过,我会推荐一个构造函数初始化器列表,它也不需要,并按照它们在类中声明的顺序执行:

Car::Car(int year, string make, int speed = 0)
    : year(year), speed(speed), make(make) {}

理想情况下,我会做这样的事情,根据它的其他用途进行调整(我会保留它 C++03):

class Car {
    int year_;
    std::string make_; 
    int speed_;

public: 
    Car(int, const std::string &, int);
    void brake();
    void accelerate(); 
    void printInfo() const;
};

Car::Car(int year, const std::string &make)
    : year_(year), make_(make), speed_() {} //speed should always be 0

void Car::brake() {
    speed_ -= 5; //consider ensuring it stays at or above 0
}

void Car::accelerate() {
    speed_ += 5;
}

void Car::printInfo() const {
    std::cout << "Your " << make_ << " is traveling at " << speed_ << " MPH.";
}

如果你想要一个,你必须弄清楚默认构造函数应该做什么。我使用构造函数初始化器列表来初始化数据成员,我将打印与加速/制动分开,在合理的情况下接受 const 引用,并使打印函数 const 因为它不修改对象。

于 2013-06-19T00:28:15.857 回答