У меня возникла такая проблема, есть класс 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" (или приемлемое преобразование отсутствует)
Объясните, чего я не понимаю.
Вы наверное имели ввиду такое
#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 компилятор не может знать Я наверное не очень хорошо обьяснил, но надеюсь вы меня поймете
Кофе для программистов: как напиток влияет на продуктивность кодеров?
Рекламные вывески: как привлечь внимание и увеличить продажи
Есть игрок в виде шара и есть множество треугольниковУ каждого треугольника есть 3 точки
В c++ перенос строки осуществляется через \n но он так-же переносит каретку в исходное состояние, пример: