取代" Car"有没有办法根据每个对象的类设置名称变量,例如" Turbo 01"或"坦克02"或者" Buggy 03",其中id包含创建的车辆数量。
#include <iostream>
#include <string>
#include <sstream>
static int id = 0; //Total Number of cars right now
class Car
{
private:
std::string name;
Car()
{
std::ostringstream tmp;
std::string temp;
tmp << "Car" << ++id;
temp = tmp.str();
}
Car(std::string name){this->name=name; id++;}
};
class Turbo : public Car()
{
Turbo():Car()
{
}
Turbo(std::string name):Car(name);
{
}
};
答案 0 :(得分:1)
首先,让我们通过提供两个必需的模板参数std::array
来确保class Car
编译:类型和大小。例如:std::array<int, 10>
。
问题是Turbo
需要一个有效的构造函数用于其基类型Car
才能执行任何其他操作。它有两种方式可供使用:
对于您编辑过的问题,问题是Car
构造函数必须对派生类可见,因此public
或protected
,而不是private
。您还可以使用默认参数来删除冗余代码。
这是一个解决方案:
class Car
{
private:
static int id; //Total Number of cars right now SO MEK IT a static class member
std::string name;
public: // public or protected so that derived classes can access it
Car(std::string n="Car") // if a name is provided, it will be used, otherwhise it's "Car".
{
std::ostringstream tmp;
std::string temp;
tmp << n << ++id;
name = tmp.str(); // !! corrected
}
};
int Car::id = 0; // initialisation of static class member
class Turbo : public Car
{
public: // !! corrected
Turbo(std::string n="Turbo") :Car(n) // !!
{ }
};