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

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

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

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

15.07.2014, 03:56. Просмотров 376. Ответов 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++
не могу определить функцию за пределами класса, не компилится подсобите советом template&lt; typename TData &gt; class Owner { ...

Можно ли разбивать определение шаблона класса на несколько файлов? - C++
Можно ли написать в хедере определение класса с прототипами методов, а реализацию методов в отдельном файле?

Перекрытие виртуальной функции базового класса - C++
Возникла проблема с перекрытием виртуальной функции базового класса. Изначально все было всё в 1 классе: class S { ... private: ...

Создайте базовый абстрактный класс «Товар» с чистой виртуальной функцией вывода данных - C++
Создайте базовый абстрактный класс «Товар» с чистой виртуальной функцией вывода данных. В этом классе должны быть элементы данных,...

Не работает вызов виртуальной функции из класса потомка - C++
Есть код: #include &lt;iostream&gt; #include &lt;vector&gt; #include &lt;list&gt; #include &lt;algorithm&gt; #include &lt;string&gt; #include &lt;sstream&gt; ...

Получить возращаемое значение из виртуальной функции из класса наследника - C++
Здравствуйте, в общем столкнулся непониманием как, получить значение из виртульной функции: class Pointers{ public: virtual...

Почему вызывается перегрузка виртуальной функции из приватной секции дочернего класса? - C++
Как вообще такое происходит class A { public: virtual void foo(){std::cout&lt;&lt;&quot;A\n&quot;; } }; class B:public A { private: ...

Stack. определение шаблона функции testStack. (хочу разобраться в коде) - C++
Вот эта программа. Хочу разобраться в коде. #include &lt;iostream&gt; #include &lt;string&gt; #include &lt;Stack&gt; using namespace std; ...

Как сделать шаблон функции другом шаблона класса? - C++
С обычной функцией понятно: template&lt;class T&gt; class A { friend void f(); } А вот если функция f шаблонная, то указать ее...

Создание шаблона bool-функции, принимающей в качестве параметра экземпляр класса - C++
Добрый день. Никак не получается осилить) Суть: есть классы, у которых есть поле str - массив символов. Хочу сделать...

объявление и определение функции класса - C++
почему не компилируется #include &lt;iostream&gt; int main(){ class A { public: A(); // объявление конструктора

Оглашение абстрактного класса с виртуальной функцией Площадь - C++
Оглашение абстрактного класса с виртуальной функцией Площадь. Огласить производные классы - Треугольник, Прямоугольник и Круг, в которых...


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

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
0x10
2459 / 1631 / 238
Регистрация: 24.11.2012
Сообщений: 4,009
15.07.2014, 07:08     Определение чистой виртуальной функции класса-шаблона #2
Во втором фрагменте кода бросаются глаза запятая вместо двоеточия после названия класса.
ForEveR
В астрале
Эксперт С++
7969 / 4731 / 320
Регистрация: 24.06.2010
Сообщений: 10,539
Завершенные тесты: 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
Модератор
Эксперт С++
1789 / 1164 / 226
Регистрация: 16.05.2013
Сообщений: 3,060
Записей в блоге: 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
673 / 276 / 12
Регистрация: 31.03.2013
Сообщений: 1,339
15.07.2014, 11:44     Определение чистой виртуальной функции класса-шаблона #6
Шаблоны и виртуальные функции вполне удачно сочетаются. Например для реализации type erasure.
Yandex
Объявления
15.07.2014, 11:44     Определение чистой виртуальной функции класса-шаблона
Ответ Создать тему
Опции темы

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