gpt4 book ai didi

c++ - 不同子类的构造函数中的个性化名称

转载 作者:行者123 更新时间:2023-11-28 06:35:42 25 4
gpt4 key购买 nike

有一种方法可以根据类别设置每个对象的名称变量,而不是“Car”,例如“Turbo 01”或“Tank 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);
{

}
};

最佳答案

首先,让我们确保 class Car通过提供两个必需的模板参数进行编译 std::array : 类型和大小。例如:std::array<int, 10> .

问题是 Turbo其基类型需要一个有效的构造函数 Car在它可以做任何其他事情之前。有两种方法可以让它工作:

  • 要么你设计 Car 以便有一个默认的构造函数(即没有参数)
  • 或者您将 Car 的构造函数放入 Turbo 的初始化程序列表中。

对于您编辑的问题,问题是 Car构造函数必须对派生类可见,因此 publicprotected , 但不是 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) // !!
{ }
};

关于c++ - 不同子类的构造函数中的个性化名称,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26819779/

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