Система элементов наследования структуры C ++ - PullRequest
0 голосов
/ 10 апреля 2020

Я пытаюсь создать систему элементов для стороннего проекта и тестирую наследование в структурах. Это не дало мне ожидаемого результата:

struct Item
{
  int price;
  int id;
};

struct Iron : Item
{
  int price = 10;
  int id = 1;
};

struct Gold : Item
{
  int price = 15;
  int id = 2;
};

int main() 
{
  std::cout << "Hello World!\n";
  Item testItem = Iron();
  std::cout << "Item price: " << testItem.price << ", Item ID: " << testItem.id << std::endl;
  testItem = Gold();
  std::cout << "Item price: " << testItem.price << ", Item ID: " << testItem.id << std::endl;
}

на выходе:

Hello World!
Item price: 0, Item ID: 0
Item price: 0, Item ID: 0

Есть идеи, как сделать эту работу?

1 Ответ

1 голос
/ 10 апреля 2020

Переопределение переменной-члена недопустимо в C ++.

Когда вы объявляете Iron::price, вы прячете в нем Item::price.

Делайте такие вещи:

struct Item
{
    int price;
    int id;
};

struct Iron : Item
{
    Iron() {price = 10, id = 1; }
};

struct Gold : Item
{
    Gold() { price = 15, id = 2; }
};

int main()
{
    std::cout << "Hello World!\n";
    Item testItem = Iron();
    std::cout << "Item price: " << testItem.price << ", Item ID: " << testItem.id << std::endl;
    testItem = Gold();
    std::cout << "Item price: " << testItem.price << ", Item ID: " << testItem.id << std::endl;
}

В вашем коде

В Iron есть четыре переменные: Item::price, Item::id, Iron::price, Iron::id

В Iron::Iron() вы изменили Iron::price и Iron::id, но вы выводите Item::price, Item::id.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...