#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。