Є абстрактний клас CombatVehicle :
class CombatVehicle
{
private:
    std::string  type;
    std::string  model;
protected:
    struct minMax
    {
        double min;
        double max;
    };
    double  health;
    double  last_damage;
    double  last_defence;
public:
    CombatVehicle();
    CombatVehicle(std::string type, std::string model, double health);
    virtual ~CombatVehicle(); 
    bool IsDestroyed() const{ return health <= 0; };
    void ShowShortInfo() const { std::cout << "  " << type << " :  " << model << std::endl; };
    virtual void ShowInfo(int X, int Y, HANDLE handle);
    virtual double Attack() const = 0;
    virtual void   Defense(double damage) = 0;
    std::string getType()const { return type;}
};
Від цього класу наслідуються нащадки Tank , ArmoredCar , AirDefenseVehicle....
lass Tank : public CombatVehicle
{
private:
    double recharge_time;
    double shot_acuracy;
    double armor_thickness;
    static constexpr  minMax rtime     { 1.5 , 2 };
    static constexpr  minMax acuracy   { 2,3 };
    static constexpr  minMax thickness { 30,50 };
    static constexpr  minMax thealth   { 1500,2000 };
    static constexpr const char*  models[5] { "M1A1 Abrams","Leopard","T-64BM Oplot","Merkava","Leclerc" };
public:
    Tank();
    Tank(std::string type, std::string model, double health, double recharge_time,double shot_acuracy,double armor_thickness);
    void   ShowInfo(int X, int Y,HANDLE handle) ;
    double Attack() const { return (100 * shot_acuracy) / recharge_time; }
    void   Defense(double damage); 
};
Існує клас Troops який містить армію техніки в масиві який заповнюється випадковим чином:
class Troops
{
private:
    enum class VehicleType
    {
        Tank = 1,
        ArmoredCar,
        AirDefenseVehicle
    };
    static const size_t max_count              = 10;
    static const size_t min_count              = 5;
    
    std::string name;
    int vehicles_count;
    CombatVehicle** troops;
public:
    Troops();
    ~Troops();
    Troops(std::string name,int vehicles_count);
    bool isVechicleExist() { return vehicles_count > 0; }
    void show(int X, int Y, HANDLE handle) const;
    CombatVehicle& getVehicle() { return *troops[vehicles_count - 1]; };
    void dellCurentVehicle();
    void v_show(int index,int prnt_index,int X, int Y, HANDLE handle) const;
};
Також існує клас Battle який створює дві армії (Troops які в свою чергу генерують випадковим чином екземпляри класів похідних від CombatVehicle  тобто Tank і тд. і зберігають в масиві) і проводить битву двох армій беручи з кожної армії по одному екземпляру техніки ... і так до того моменту коли в одній з армій не закінчиться техніка.
class Battle
{
private:
    Troops troops1;
    Troops troops2;
    int pause = 500;
    bool rаund(CombatVehicle& veh1, CombatVehicle& veh2, HANDLE handle);
    bool isDestroyed(CombatVehicle& veh, HANDLE handle , bool swich);
    HANDLE handle = GetStdHandle(STD_OUTPUT_HANDLE);
public:
    Battle(std::string tr1name, std::string tr2name,int trvCount, int tr2vCount = 0);
    void battleStart();
};
Саме  про методи CombatVehicle& getVehicle() та  bool rаund(CombatVehicle& veh1, CombatVehicle& veh2, HANDLE handle) було питання....
Все працює ... але виклик  rаund(getVehicle(),getVehicle(),handle) ... якось...