我已经做了一个我的项目基本上基于的一小部分 - 除了更大。我很难理解这个特殊的概念。我需要制作一个继承车辆类的汽车类,然后必须有单独的类,如窗户,门,引擎等......我需要通过汽车类访问这些类来调整其“属性”
#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
}
答案 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);
};
这表明Car
是Vehicle
,其中包含5 Windows
。
这应适用于门,发动机等
答案 2 :(得分:0)
轮胎[4]不会创建任何Wheel对象,只会创建一个数组。这就是为什么访问它不会给你任何东西。
你需要一个Car构造函数来创建汽车的轮子。
此外,print是Vehicle中的虚拟纯函数,因此您需要在某处实现它。可以有print(){};或类似的头文件。
或者你可以用它来测试/调试。
答案 3 :(得分:0)
我假设你有工作的构造函数。 尝试这样的事情:
car1->tires[0]->inflate(10);