Форум программистов, компьютерный форум CyberForum.ru

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
QGuest
8 / 8 / 0
Регистрация: 08.01.2013
Сообщений: 85
#1

Определение чистой виртуальной функции класса-шаблона - C++

15.07.2014, 03:56. Просмотров 362. Ответов 5
Метки нет (Все метки)

Есть класс Comparable<T>:
C++
1
2
3
4
5
6
7
8
9
10
11
12
template<typename T>
class Comparable : virtual public Object {
public:
    virtual int compareTo(const T other) const = 0;
 
    virtual bool operator< (const T other) const final { return compareTo(other) <  0; }
    virtual bool operator> (const T other) const final { return compareTo(other) >  0; }
    virtual bool operator<=(const T other) const final { return compareTo(other) <= 0; }
    virtual bool operator>=(const T other) const final { return compareTo(other) >= 0; }
    virtual bool operator==(const T other) const final { return compareTo(other) == 0; }
    virtual bool operator!=(const T other) const final { return compareTo(other) != 0; }
};
И есть класс Time, который должен реализовать сравнения как и другими Time, так и с строками (char*):
C++
1
2
3
4
5
6
class Time, public Comparable<Time>, public Comparable<char*> {
    /**/
    virtual int compareTo(const Time other) const { /**/ }
    virtual int compareTo(const char* other) const { /**/ }
    /**/
};
Но компилятор ругается, что я не реализовал метод compareTo(const char* other), хотя это не так.
Кстати, за compareTo(const Time other) ничего не говорит, значит все нормально.
И в чем ошибка?
Лучшие ответы (1)
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
15.07.2014, 03:56     Определение чистой виртуальной функции класса-шаблона
Посмотрите здесь:

Открытые функции класса: ввод массива, вывод массива, определение длины вектора C++
C++ объявление и определение функции класса
C++ определение функции за пределами шаблона класса
C++ Определение метода-шаблона за пределами шаблона класса
Создание шаблона bool-функции, принимающей в качестве параметра экземпляр класса C++
C++ Не работает вызов виртуальной функции из класса потомка
C++ Создайте базовый абстрактный класс «Товар» с чистой виртуальной функцией вывода данных
C++ Можно ли разбивать определение шаблона класса на несколько файлов?
C++ Почему вызывается перегрузка виртуальной функции из приватной секции дочернего класса?
Как сделать шаблон функции другом шаблона класса? C++
C++ Stack. определение шаблона функции testStack. (хочу разобраться в коде)
Перекрытие виртуальной функции базового класса C++

Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
0x10
2446 / 1618 / 236
Регистрация: 24.11.2012
Сообщений: 3,977
15.07.2014, 07:08     Определение чистой виртуальной функции класса-шаблона #2
Во втором фрагменте кода бросаются глаза запятая вместо двоеточия после названия класса.
ForEveR
Модератор
Эксперт С++
 Аватар для ForEveR
7958 / 4720 / 319
Регистрация: 24.06.2010
Сообщений: 10,525
Завершенные тесты: 3
15.07.2014, 10:14     Определение чистой виртуальной функции класса-шаблона #3
Сообщение было отмечено автором темы, экспертом или модератором как ответ
QGuest, Потому что действительно нет такой функции. Должно быть
C++
1
virtual int compareTo(char* const other) const { /**/ }
Т.к. функция compareTo принимает const T, а T в данном случае есть char*, учитывая, что
C++
1
const char*
является указателем на константу - это не то что нужно. Нужен константый указатель, который будет
C++
1
char* const
Ilot
Модератор
Эксперт С++
1780 / 1155 / 223
Регистрация: 16.05.2013
Сообщений: 3,042
Записей в блоге: 5
Завершенные тесты: 1
15.07.2014, 10:28     Определение чистой виртуальной функции класса-шаблона #4
Добавлю к ответу ForEveR'а const в обявлении функции тоже входит в ее сигнатуру. Т.е. вот это две разные функции:
C++
1
2
    virtual int compareTo(const Time other) const { /**/ }
    virtual int compareTo(const Time other)  { /**/ }
olper
15.07.2014, 11:38
  #5

Не по теме:


Цитата Сообщение от Б. Страуструп
Независимые концепции должны быть представлены независимо и объединятся только при необходимости. При нарушении этого принципа вы либо объединяете несвязанные концепции, либо создаете ненужные зависимости. В любом случае вы получаете менее гибкий набор компонентов для построения системы.
Б. Страуструп
Глава 13. Шаблоны.
Стих первый «Введение»
если более приземленно, то "шаблоны" и виртуальные функции как молоко и селедка, по отдельности вроде ничего, а вместе могут привести к неожиданному результату

Voivoid
 Аватар для Voivoid
593 / 269 / 12
Регистрация: 31.03.2013
Сообщений: 1,329
15.07.2014, 11:44     Определение чистой виртуальной функции класса-шаблона #6
Шаблоны и виртуальные функции вполне удачно сочетаются. Например для реализации type erasure.
Yandex
Объявления
15.07.2014, 11:44     Определение чистой виртуальной функции класса-шаблона
Ответ Создать тему
Опции темы

Текущее время: 10:18. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru