C ++练习车辆程序问题 - 初学者编程

时间:2014-11-29 00:13:00

标签: c++ virtual-functions

我已经做了一个我的项目基本上基于的一小部分 - 除了更大。我很难理解这个特殊的概念。我需要制作一个继承车辆类的汽车类,然后必须有单独的类,如窗户,门,引擎等......我需要通过汽车类访问这些类来调整其“属性”

#include <iostream>
using namespace std;

class Vehicle
{
    virtual void print() = 0;
};

class Car : public Vehicle
{
    virtual void print();
    Wheel tires[4];
};

class Wheel
{
public:
    int pressure = 0;
    int inflate(int psi)
    {
        pressure = pressure + psi;
    }
};

int main()
{
//What would I have to put here or anywhere else to increase the pressure of a car object's FIRST     tire's pressure - Car car1; car1.tires[0].inflate(10); (this doesn't seem to work)
}

#include <iostream>
#include <vector>
using namespace std;


class Vehicle
{
    virtual void print() = 0;
};

class Car : public Vehicle
{
    virtual void print();
    Car(Wheel wheel[4])
    {

    }
};

class Wheel
{
public:
    int pressure = 0;
    int inflate(int psi)
    {
        pressure = pressure + psi;
    }
};

int main()
{
    Car car1(Wheel wheel[4]);
    //I still don't know what I could add here that would inflate the first tire
}

4 个答案:

答案 0 :(得分:2)

它不起作用的原因是类中的默认访问是私有的(而不是结构,它是公共的)。与

class Vehicle
{
public:
    virtual void print() = 0;
};

// Note that class Wheel has to be defined before class Car, or
// the compiler will complain that class Wheel is unknown here.
class Car : public Vehicle
{
public:
   virtual void print();
   Wheel tires[4];
};

应该可以写

int main() {
  Car c;
  c.tires[0].inflate(10);
}

拥有公共数据成员是否是一个好主意是另一个问题(这不是一个好主意)。

答案 1 :(得分:0)

这会有用吗?

class Window
{
 //...
};

class Car
: public Vehicle
{
  std::vector<Windows> car_windows(5);
};

这表明CarVehicle,其中包含5 Windows

这应适用于门,发动机等

答案 2 :(得分:0)

轮胎[4]不会创建任何Wheel对象,只会创建一个数组。这就是为什么访问它不会给你任何东西。

你需要一个Car构造函数来创建汽车的轮子。

此外,print是Vehicle中的虚拟纯函数,因此您需要在某处实现它。可以有print(){};或类似的头文件。

或者你可以用它来测试/调试。

答案 3 :(得分:0)

我假设你有工作的构造函数。 尝试这样的事情:

car1->tires[0]->inflate(10);