Я хочу сделать несколько «дуэлей» с двумя «единицами». Я пишу класс «дуэль», который строит из двух «единиц». Но какая-то «единица» - особая (унаследованная от единиц), как герои, боссы и т. Д. И они хотят использовать специальные удары во время битвы. Но на самом деле класс «дуэль» не знает, кто герой, или кто чистый.вызов родительской виртуальной функции из дочернего класса
код выглядит следующим образом:
#include <iostream>
class unit{
public:
unit(){};
virtual void make_hit(){
std::cout<<"pure hit\n";
}
};
class hero:public unit {
public:
hero():unit(){};
void make_hit(){
std::cout<<"SUPER hit\n";
}
};
class duel {
unit *a, *b;
public:
duel(unit _a, unit _b):a(&_a),b(&_b){};
void start(){
a->make_hit();
b->make_hit();
}
};
int main(){
duel(unit(),hero()).start();
return 0;
}
У меня есть две основные проблемы.
Первое - я использую относится к временным объектам в конструкторе. Это незаконно, когда duel :: duel() закончен.
Второй - мой герой превратился в чистый блок, и не использовать «супер-хит»
Можно ли исправить это в элегантном способе (без изменения вызова в main()
)?
IIRC, вы передаете * копию * объектов, которые вы создаете, а не оригинальные. И копия имеет тип, определяемый переменной param. См. Http://www.cplusplus.com/forum/windows/9891/ – SJuan76
Aaaand http://stackoverflow.com/questions/2432683/what-does-slicing-mean-in-c – SJuan76
Нет элегантного способа исправить это без изменение вызова в 'main()'. Сожалею. –