Использование перегрузки оператора

202
25 января 2018, 19:37

У меня возникла такая проблема, есть класс Place, он главный, и от него наследуются три класса, дело в том, что в классе Place нет перегруженного оператора >>, но он есть в остальных трех, но когда в main я создаю массив указателей типа Place, а потом создаю в том же массиве объекты дочерних классов, то мне пишет, что у класса Place нет перегруженного оператора >>.

Place * tickets[2];
tickets[0] = new Parter[count_of_tickets[0]];
tickets[1] = new Balcon[count_of_tickets[1]];
tickets[2] = new Loza[count_of_tickets[2]];

Ошибка 1 error C2679: бинарный ">>": не найден оператор, принимающий правый операнд типа "Place" (или приемлемое преобразование отсутствует)

Объясните, чего я не понимаю.

Answer 1

Вы наверное имели ввиду такое

#include <iostream>
#include <string>
// допустим так
class B {
    std::string s;
    bool b;
public:
    B() : s("yes"), b(true) {}
};
class D : public B {
    char c;
public:
    char get() const { return c; }
    friend
    std::istream& operator >>(std::istream& is,  D& d)
    {
        is >> d.c;
        return is;
    }
};
int main()
{    
    B* p = new D;
    //std::cin >> *p; // ошибка конечно постольку поскольку p указывает на 
    //начало обьекта D, который построен на блоке string и bool класса B
    D* pd = static_cast<D*>(p);
    std::cin >> *pd;     // правильно
    std::cout << pd->get(); // получите то что ввели
    return 0;
}

В этом примере как вводить *P компилятор не может знать Я наверное не очень хорошо обьяснил, но надеюсь вы меня поймете

READ ALSO
LNK2019 inline функция

LNK2019 inline функция

Метод assing класа List объявлен в файле listh

217
Как изменить размер консольного окна?

Как изменить размер консольного окна?

Как изменить размер консольного окна?

388
Пересечение треугольника и шара. С++

Пересечение треугольника и шара. С++

Есть игрок в виде шара и есть множество треугольниковУ каждого треугольника есть 3 точки

276
Как перенести на новую строку не возвращая каретку?

Как перенести на новую строку не возвращая каретку?

В c++ перенос строки осуществляется через \n но он так-же переносит каретку в исходное состояние, пример:

227