Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.50/6: Рейтинг темы: голосов - 6, средняя оценка - 4.50
2 / 2 / 3
Регистрация: 19.01.2013
Сообщений: 32
1

Полиморфизм

30.07.2013, 16:58. Показов 1070. Ответов 3
Метки нет (Все метки)

Я хотел реализовать множество, используя
множественное наследование, но когда написал

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
template <class T>
class set {
protected:
    virtual bool is_empty() const = 0;
    virtual set<T> left() const = 0;
    virtual set<T> right() const = 0;
    virtual ~set() = 0;
};
 
template <class T>
class empty: protected set<T> {
public:
    bool is_empty() const {return true;}
    empty<T> left() const {return *this;}
    empty<T> right() const {return *this;}
    ~empty() { }
};
я столкнулся с проблемой:
в классе empty возникает ошибка - invalid covariant return type
в классе set возникает ошибка - overriding

Я гуглил и обнаружил, что в стандарте С++11 есть
ключевое слово override для таких случаев, но как
обходились до С++11? Как мне исправить код, чтобы
компилятор не выдавал ошибок?
0

Помощь в написании контрольных, курсовых и дипломных работ здесь.

Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
30.07.2013, 16:58
Ответы с готовыми решениями:

Полиморфизм
Всем доброго времени суток.Сразу к делу. Если описывать с помощью полиморфизма подклассы и потом...

Полиморфизм
Помогите сделать в коде полиморфизм. Тему особо не понимаю Если что, базовый класс - &quot;Страна&quot; и...

Полиморфизм
Здравствуйте :) Я пытался читать про полиморфизм. Читал-читал, но не очень дошло. Понял, что можно...

Полиморфизм
Хай :senor: class MyPrint//производный класс { public: MyPrint() { cout &lt;&lt; &quot;Constructor...

3
249 / 219 / 63
Регистрация: 30.07.2013
Сообщений: 465
30.07.2013, 17:11 2
Вот так, например, ошибок нет:

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
template <class T>
class set
{
protected:
    virtual bool is_empty() const = 0;
    virtual const set<T>& left() const = 0;
    virtual const set<T>& right() const = 0;
    virtual ~set() {};
};
 
template <class T>
class empty: protected set<T>
{
public:
    bool is_empty() const
    {
        return true;
    }
    
    const empty<T>& left() const
    {
        return *this;
    }
    
    const empty<T>& right() const
    {
        return *this;
    }
    
    ~empty()
    {
    }
};
override нужен для раннего отлова ошибок, т.е. с ним компиляться все равно не будет.
0
:)
Эксперт С++
4769 / 3263 / 497
Регистрация: 19.02.2013
Сообщений: 9,046
30.07.2013, 17:11 3
Потому что надо обходиться указателями (или ссылками):
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
template <class T>
class set {
protected:
    virtual bool is_empty() const = 0;
    virtual const set* left() const = 0;
    virtual const set* right() const = 0;
    virtual ~set() { };
};
 
template <class T>
class empty: public set<T> {
public:
    bool is_empty() const {return true;}
    const empty* left() const {return this;}
    const empty* right() const {return this;}
    ~empty() { }
};
0
2 / 2 / 3
Регистрация: 19.01.2013
Сообщений: 32
30.07.2013, 17:19  [ТС] 4
Спасибо!
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
30.07.2013, 17:19

Полиморфизм
Сколько я не читал книг и уроков по С++-программированию, я так и не смог понять что такое...

Полиморфизм
В одной дешевой книжке про него пишут а в другой дорогой нет и понять я почему то немогу точно как...

Полиморфизм c++
Построить массив из указателей (базового типа) на объекты обоих классов. Выбрать объекты...

Полиморфизм.
Доброго времени суток. Помогите решить следующую задачку: Создать класс периодическое издание...


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

Или воспользуйтесь поиском по форуму:
4
Ответ Создать тему
Опции темы

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