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

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

Войти
Регистрация
Восстановить пароль
 
krazyd
16 / 0 / 0
Регистрация: 10.11.2012
Сообщений: 102
#1

Использование наследования классов - C++

30.03.2016, 19:07. Просмотров 208. Ответов 11
Метки нет (Все метки)

День добрый, форум!

Вот такой вопрос:
Есть родительский класс A, у него 2 потомка, B и C. Внутри другого класса F я создаю объект класса A. Потом, в зависимости от выбора пользователя, я должен использовать внутри класса F функции классов B или C.

Простите если очень запутанно описал. Не могли бы вы привести пример кода для подобной задачки.
Заранее благодарю Вас!

C++
1
2
3
4
5
6
7
8
9
10
11
class A{};
 
class B:public A{};
class C:public A{};
 
class F
{
A objct1;
public:
void choose_child(int mode);
};
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
30.03.2016, 19:07
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Использование наследования классов (C++):

Использование различных свойств наследования для расширения и уточнения классов - C++
Помогите решить задачу Среди представленных понятий,( квитанция, накладная, документ, чек), выбрать самое общее, на основе которого...

Работа с классами. Объявление классов наследования - C++ - C++
На языке С++ разработать класс, описывающий точку на плоскости. Реализовать методы ввода и изменения параметров точки, методы ...

Организация наследования классов. Уровни доступа - C++
Дана матрица размера M × N и целое число K (1 ≤ K ≤ N). После столбца матрицы с номером K вставить столбец из единиц. Подскажите...

Разработать программу с использованием наследования классов, реализующую классы - C++
Ребят помоги пожалуйста начинающему программисту. Использовать максимально возможное количество возможных функций (не менее 3), а...

Продолжение цепочки наследования без дублей базовых классов - C++
class A { public: A(); int x; }; class B : public A { public:

Множественное наследование, Перегрузка функций, Перегрузка операторов, Использование дружественных функций и классов, Использование шаблонов классов - C++
Здравствуйте!!! Я бы хотел попросить помоч решить...ну или скинуть примеры таких задач, если вдруг у вас они завалялись на компе или...

11
Hikari
Хитрая блондиночка $)
1449 / 956 / 285
Регистрация: 21.12.2015
Сообщений: 3,798
30.03.2016, 19:22 #2
Цитата Сообщение от krazyd Посмотреть сообщение
я должен использовать внутри класса F функции классов B или C.
А в базовый класс А их нельзя вынести? Хотя бы абстрактно описать?
0
kylroma
Одессит
204 / 75 / 23
Регистрация: 30.12.2013
Сообщений: 276
Записей в блоге: 1
Завершенные тесты: 2
30.03.2016, 20:08 #3
Так?
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
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
#include <iostream>
 
using namespace std;
 
class A{
public:
    virtual void hello()
    {
        cout << "Hello\n";
    }
    virtual ~A(){};
};
 
class B:public A
{
public:
    void hello()
    {
        cout << "Privet\n";
    }
};
 
class C : public A
{
public:
        void hello()
    {
        cout << "Vitau\n";
    }
};
 
 
class F
{
A *objct1;
public:
    void choose_child(int mode)
    {
        if(mode == 1)
            objct1 = new B;
        else if(mode == 2)
            objct1 = new C;
        else
            objct1 = new A;
 
        objct1->hello();
    };
};
 
 
int main()
{
    F f;
    f.choose_child(3);
    f.choose_child(2);
    return 0;
}
0
avgoor
915 / 550 / 119
Регистрация: 05.12.2015
Сообщений: 1,531
30.03.2016, 20:12 #4
kylroma, Утечки памяти вас не волнуют?
0
kylroma
Одессит
204 / 75 / 23
Регистрация: 30.12.2013
Сообщений: 276
Записей в блоге: 1
Завершенные тесты: 2
30.03.2016, 20:15 #5
Только хотел написать об этом.
0
krazyd
16 / 0 / 0
Регистрация: 10.11.2012
Сообщений: 102
30.03.2016, 21:01  [ТС] #6
Какие утечки? Можно поподробнее?
Благодарю за ответы!
0
castaway
Эксперт С++
4915 / 3023 / 370
Регистрация: 10.11.2010
Сообщений: 11,081
Записей в блоге: 10
Завершенные тесты: 1
30.03.2016, 21:10 #7
Цитата Сообщение от krazyd Посмотреть сообщение
Потом, в зависимости от выбора пользователя, я должен использовать внутри класса F функции классов B или C.
Вам нужно динамически создавать объекты в зависимости от выбора. Вы не сможете провернуть это в вашем примере.
0
hoggy
6701 / 2883 / 494
Регистрация: 15.11.2014
Сообщений: 6,480
Завершенные тесты: 1
30.03.2016, 21:23 #8
Цитата Сообщение от castaway Посмотреть сообщение
Вы не сможете провернуть это в вашем примере.
http://rextester.com/OFIJG69907

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
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
#include <iostream>
#include <cassert>
 
struct A
{
    virtual ~A(){}
};
 
struct B: A
{
    B() { std::cout <<"объект B был построен\n"; }
};
 
struct C: A
{
    C() { std::cout <<"объект C был построен\n"; }
};
 
 
class F
{
    static const size_t capacity = sizeof(A);
    
    static_assert(
        
        sizeof(B) <= capacity
        &&
        sizeof(C) <= capacity,
        "ERROR: invalid size"
    );
    
    char buf[ sizeof(B) ];
    
public:
    void choose_child(int mode)
    {
        switch(mode)
        {
            case 1: new (buf) B; break;
            case 2: new (buf) C; break;
            default:
                assert(0 && "fuck of and die");
        }
    }
        
};
 
 
 
 
 
 
int main()
{
    std::cout << "Hello, world!\n";
    
    F().choose_child(1);
    F().choose_child(2);
}
0
castaway
Эксперт С++
4915 / 3023 / 370
Регистрация: 10.11.2010
Сообщений: 11,081
Записей в блоге: 10
Завершенные тесты: 1
30.03.2016, 21:34 #9
hoggy, я имел в виду то, что в примере ТС не получится использовать функции-члены обеих классов в экземпляре предка.
0
hoggy
6701 / 2883 / 494
Регистрация: 15.11.2014
Сообщений: 6,480
Завершенные тесты: 1
30.03.2016, 21:38 #10
Цитата Сообщение от castaway Посмотреть сообщение
hoggy, я имел в виду то, что в примере ТС не получится использовать функции-члены обеих классов в экземпляре предка.
почему же?
все что ему нужно - добавить виртуальных методов.
1
castaway
Эксперт С++
4915 / 3023 / 370
Регистрация: 10.11.2010
Сообщений: 11,081
Записей в блоге: 10
Завершенные тесты: 1
30.03.2016, 21:41 #11

Не по теме:

Цитата Сообщение от hoggy Посмотреть сообщение
почему же?
все что ему нужно - добавить виртуальных методов.
Значит я старею..



Добавлено через 50 секунд

Не по теме:

... ну или занимаюсь совсем не тем.

0
kylroma
Одессит
204 / 75 / 23
Регистрация: 30.12.2013
Сообщений: 276
Записей в блоге: 1
Завершенные тесты: 2
30.03.2016, 22:50 #12
Цитата Сообщение от krazyd Посмотреть сообщение
Какие утечки? Можно поподробнее?
В моём примере я не удалил созданные экземпляры классов.
Я сначала указателю присвоил объект класса А, а потом не удалив его присвоил этому же указателю объект класса С. Объект класса А теперь остался в памяти, но я его не использую и использовать не буду. Это грубая ошибка.
Нужно исправить вот так:
C++
1
2
3
4
5
6
7
8
9
10
11
12
    void choose_child(int mode)
    {
        if(mode == 1)
            objct1 = new B;
        else if(mode == 2)
            objct1 = new C;
        else
            objct1 = new A;
 
        objct1->hello();
        delete objct1;
    };
0
30.03.2016, 22:50
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
30.03.2016, 22:50
Привет! Вот еще темы с ответами:

Структура наследования базовых/производных классов: error LNK 1104 - C++
Может быть проблема, если я неправильно что-то записал в структуре наследования базовых/производных классов?

Разработать программу с использованием наследования классов, реализующую классы: точка; линия; круг - C++
помогите написать программу: Разработать программу с использованием наследования классов, реализующую классы: точка; линия; круг....

Чем отличаются структуры для наследования интерфейса от структур для наследования реализаций? - C++
Дорогие программисты, во первых, хочу поздравить вас с Наступающим новым Годом! Я к вам обращаюсь с маленькой просьбой. Я никак не могу...

Использование классов - C++
Разработать заголовочный файл, содержащий описание соответствующего класса, функции и операторы. Описание функций-членов класса разместить...


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

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

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