#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中什么都不显示。
速度变量始终显示为49898575 这整个星​​期我都被困住了。
如何连接类的私有变量和成员函数。
我以为我的带有参数的构造函数可以解决该问题,但是显然不会。
有人可以花点时间为我评论此代码吗?我要把头发拔出来。

这是分配给班级的问题,这是我要解决的问题,但我没有赶上班级和成员函数以及它们如何协同工作。

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

•制造。用于保持汽车品牌的线。

•速度。保持汽车当前速度的整数。

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

•构造函数。建造者应接受汽车的年份并作为参数
并将这些值分配给对象的年份并进行成员变量设置。构造函数
应该将速度成员变量初始化为0。

•存取器。应该创建适当的访问器函数以允许值
从对象的年份,构造和速度成员变量中检索。

•加速。加速功能应在速度成员变量上加5
每次被调用。

•刹车。制动功能应从速度成员变量中各减去5
时间被称为。

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

然后,五次调用制动功能。

每次刹车后
功能,获取汽车的当前速度并显示出来。

最佳答案

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

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

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。

10-05 20:36
查看更多