Извлечение данных из класса с полиморфизмом - PullRequest
2 голосов
/ 08 апреля 2019

Я пытаюсь создать систему управления гостиничными номерами и пытаюсь реализовать ООП для обработки номеров разных типов.

Это родительский класс с именем HotelRoom:

class HotelRoom{
public:
    HotelRoom(int room_number, double cost_per_night){
        room_number = room_number;
        cost_per_night = cost_per_night;
    };

    int get_room_number(){
        return room_number;
    };

    void set_room_number(int new_room_number){
        room_number = new_room_number;
    };

    double get_cost_per_night(){
        return cost_per_night;
    };

    void set_cost_per_night(double cost_per_night){
        cost_per_night = cost_per_night;
    };

    Date get_last_checkin(){
        return last_checkin;
    };

    void set_last_checkin(Date date_checked){
        last_checkin = date_checked;
    };

    bool get_booked(){
        return booked;
    };

    void set_get_booked(bool booked){
        booked = booked;
    };

private:
    int room_number;
    double cost_per_night;
    Date last_checkin;
    bool booked = false;
};

А это дочерний класс с именем SingleRoom:

class SingleRoom: public HotelRoom{
public:

    SingleRoom(int room_number, double cost_per_night, string bed_size):HotelRoom(room_number, cost_per_night){
        bed_size = bed_size;
    };

    void set_bed_size(string bed_size){
        bed_size = bed_size;
    }

    string get_bed_size(){
        return bed_size;
    };

private:
    string bed_size;
};

И это основная функция:

int main(){

    SingleRoom new_room(123, 43.22, "Large");
    cout<<new_room.get_room_number()<<endl;

}

Когда я запускаю этот код, я ожидаю номер комнаты123 распечатать, однако я получаю большое отрицательное число.Может быть, место в памяти?

Не уверен, где все идет не так, и признателен за любую помощь!

Ответы [ 2 ]

2 голосов
/ 08 апреля 2019

Альтернативой this или изменением имени параметров (как в ответе @ KarstenKoop) является использование списка инициализатора члена (как упоминает @melpomene), например:

HotelRoom(int room_number, double cost_per_night)
    : room_number(room_number), cost_per_night(cost_per_night)
{
}

Кстати, нет необходимости в ; после определения функций.

1 голос
/ 08 апреля 2019

В вашем конструкторе

HotelRoom(int room_number, double cost_per_night){
    room_number = room_number;
    cost_per_night = cost_per_night;
};

вы присваиваете значение параметра room_number для себя.Замените это на

this->room_number = room_number;

или назовите переменную-член по-другому.То же самое с cost_per_night.

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