gpt4 book ai didi

C++成员函数和构造函数问题

转载 作者:行者123 更新时间:2023-11-28 07:33:36 26 4
gpt4 key购买 nike

#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 中不显示任何内容。speed 变量总是出现 49898575 <-- 一些像这样的随机高数字,我假设我将它初始化为 0。我整个星期都在坚持这个。如何连接我的类私有(private)变量和我的成员函数。我以为带参数的构造函数会解决这个问题,但显然不是。有人可以花时间为我批评这段代码吗?我要把我的头发拉出来。

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

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

• 制作。保存汽车品牌的字符串。

• 速度。一个保存汽车当前速度的整数。

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

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

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

• 加速。加速函数应该给speed成员变量加5每次调用它。

• 刹车。 brake 函数应该每次从 speed 成员变量中减去 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,因为它不修改对象。

关于C++成员函数和构造函数问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17181002/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com