Почему классы не ловятся? c++ исключения - Вопросы по С+

Вопрос Почему классы не ловятся? c++ исключения

Регистрация
24 Дек 2013
Сообщения
79
Репутация
4
Спасибо
0
Монет
0
Почему классы не ловятся?



#include

#include

#include "Item.hpp"

#include "Fish.hpp"

#include "Boot.hpp"

#include "colors.h"





int main()

{

const int field_size = 9;

Item* field[field_size];

for (int i = 0; i < field_size; i++)

field = nullptr;





//Fish

int r = std::rand()%field_size;

srand(std::time(nullptr));

field[r] = new Fish();

std::cout
 
Регистрация
10 Фев 2013
Сообщения
82
Репутация
0
Спасибо
0
Монет
0
От того что вы в Item* кладете Fish* либо Boot* он не меняется и все равно остается Item*.
Короче такой способ работать не будет.
Item ловит все три класса, а Boot и Fish только сами себя.
Можно ловить непосредственно сам указатель или ссылку, тогда информация о наследовании терятся не будет, но как я написал выше, нужен другой способ узнать какой именно класс находится в указателе(ссылке) на базовый. Например добавить какую-то виртуальную функцию с разным поведением. А если сделать Item -&gt; Fish -&gt; Boot (бутса наследуется от рыбы, а рыба от итем) тогда можно различить при помощи dynamic_cast. Если не кастится - значит это итем, если один раз кастится - значит рыба, если два раза - значит бутса.
 
Сверху Снизу