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

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

Войти
Регистрация
Восстановить пароль
 
wowofbob
2 / 2 / 0
Регистрация: 19.01.2013
Сообщений: 32
#1

Полиморфизм - C++

30.07.2013, 16:58. Просмотров 622. Ответов 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
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
30.07.2013, 16:58
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Полиморфизм (C++):

С++ и полиморфизм - C++
Здравствуйте. Ответьте пожалуйста на несколько вопросов: 1. Что такое абстрактная функция простыми словами? 2. Что такое...

полиморфизм - C++
Всем привет, изучаю С++ недавно, я новичек в этом языке программирования, читаю про ООП, понял все за исключением полиморфизма, что делает...

полиморфизм=( - C++
Ув.Знатаки Доброго времени суток!Вот есть проблемка с написание полиморфизма,вот написал класс,написал наследование,а вот как теперь сюда...

Полиморфизм в с++ - C++
Вообщем я делал программу,изначально в ней было реализовано наследование.Затем дали задание реализовать полиморфзим для функции Scale для...

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

Полиморфизм - C++
Всем доброго времени суток, Разъясните пожалуйста задание: Создать класс живущих с местоположением . Определить наследуемые классы -...

Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Fyret
184 / 170 / 13
Регистрация: 30.07.2013
Сообщений: 359
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
Tulosba
:)
Эксперт С++
4396 / 3239 / 297
Регистрация: 19.02.2013
Сообщений: 9,045
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
wowofbob
2 / 2 / 0
Регистрация: 19.01.2013
Сообщений: 32
30.07.2013, 17:19  [ТС] #4
Спасибо!
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
30.07.2013, 17:19
Привет! Вот еще темы с ответами:

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

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

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

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


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

Или воспользуйтесь поиском по форуму:
Yandex
Объявления
30.07.2013, 17:19
Ответ Создать тему
Опции темы

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