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

Абстрактные классы наследия. - C++

Восстановить пароль Регистрация
 
kilik
5 / 5 / 1
Регистрация: 15.11.2010
Сообщений: 58
17.10.2011, 20:17     Абстрактные классы наследия. #1
Ребят подскажите пожалуйста как мне написать чтобы в классе С виртуальные функции класса B заменялись функциями класса А. можно ли так сделать?

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
class A{
    void metod_1(){};
    void metod_2(){};
    void metod_3(){};
};
class B{
    virtual void metod_1()=0;
    virtual void metod_2()=0;
    void metod_4(){};
};
 
class C:public A,public B{
 
    void metod_5(){};
};
 
int main(){
    C test;//ошибка нельзя создать обект абстрактного класса 
    return 0;
}
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
17.10.2011, 20:17     Абстрактные классы наследия.
Посмотрите здесь:

C++ абстрактные классы
C++ Абстрактные классы
Абстрактные классы C++
C++ Абстрактные классы
C++ Абстрактные классы
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Сыроежка
Заблокирован
17.10.2011, 20:55     Абстрактные классы наследия. #2
Цитата Сообщение от kilik Посмотреть сообщение
Ребят подскажите пожалуйста как мне написать чтобы в классе С виртуальные функции класса B заменялись функциями класса А. можно ли так сделать?

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
class A{
    void metod_1(){};
    void metod_2(){};
    void metod_3(){};
};
class B{
    virtual void metod_1()=0;
    virtual void metod_2()=0;
    void metod_4(){};
};
 
class C:public A,public B{
 
    void metod_5(){};
};
 
int main(){
    C test;//ошибка нельзя создать обект абстрактного класса 
    return 0;
}
Нужно сделать класс A производным от класса B и переопределить чисто виртуальные функции. Либо в самом классе С переопределить функции класса B включив в их тело вызов функций класса A.
kilik
5 / 5 / 1
Регистрация: 15.11.2010
Сообщений: 58
17.10.2011, 22:08  [ТС]     Абстрактные классы наследия. #3
С первым способом разобрался.
C++
1
2
3
4
5
6
7
8
9
class B{
    ...
};
class A:public B{
    ...
};
class C:public A{
    ...
};
Можете показать на примере:
Цитата Сообщение от Сыроежка Посмотреть сообщение
в самом классе С переопределить функции класса B включив в их тело вызов функций класса A
hijacker7
19 / 19 / 1
Регистрация: 06.10.2011
Сообщений: 53
17.10.2011, 22:59     Абстрактные классы наследия. #4
Вот так. Только я классы A и B местами поменял для удобства
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
class A{
    protected: // Или public
        virtual void metod_1() = 0;
        virtual void metod_2() = 0;
        void metod_3(){};
};
class B: public A{
    protected: // Или public
        virtual void metod_1(){}
        virtual void metod_2(){}
        void metod_4(){};
};
 
class C: public B{
 
    protected: // Или public
        virtual void metod_1(){
            B::metod_1();
        }
        virtual void metod_2(){
            B::metod_2();
        }
};
kilik
5 / 5 / 1
Регистрация: 15.11.2010
Сообщений: 58
17.10.2011, 23:38  [ТС]     Абстрактные классы наследия. #5
спасибо за помощь
Yandex
Объявления
17.10.2011, 23:38     Абстрактные классы наследия.
Ответ Создать тему
Опции темы

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