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

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

Войти
Регистрация
Восстановить пароль
 
nikkka
Мат в 32 хода
235 / 170 / 8
Регистрация: 10.09.2009
Сообщений: 1,096
#1

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

08.07.2010, 11:26. Просмотров 908. Ответов 10
Метки нет (Все метки)

1) что происходит со старым конструктором когда я создаю новый, пренадлежащий производному классу? (первый конструктор пренадлежит базовому классу). я могу использовать оба конструктора?
2) тот же вопрос по отношению к дестукторам.

извените за ошибку в назвнии темы - везде вместо слова "тип" должно быть слово "класс".
Лучшие ответы (1)
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
08.07.2010, 11:26     что происходит со старым конструктором когда я создаю новый, пренадлежащий производному типу? (первый конструктор пренадлежит базовому типу)
Посмотрите здесь:

Вопросы по типу char C++
sizeof к объекту или типу? C++
Приведение void* указателя к типу C++
C++ как в c++ проверить пренадлежит ли переменная определенному типу?
Приведение к типу-наследнику C++
C++ Выражение должно относиться к целочисленному типу или типу перечисления без области видимости
C++ Приведение к базовому типу
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Nameless One
Эксперт С++
5767 / 3416 / 255
Регистрация: 08.02.2010
Сообщений: 7,441
08.07.2010, 12:28     что происходит со старым конструктором когда я создаю новый, пренадлежащий производному типу? (первый конструктор пренадлежит базовому типу) #2
Цитата Сообщение от nikkka Посмотреть сообщение
я могу использовать оба конструктора?
Оба конструктора (и деструктора) можно и даже нужно использовать.
Вот небольшой пример.
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
#include <iostream>
 
class parent
{
protected:
    int* m_pn;
public:
    parent(int x)
    {
        m_pn = new int(x);
        std::cout << "Constructor of the parent class" << std::endl;
    }
    virtual ~parent()
    {
        delete m_pn;
        std::cout << "Destructor of the parent class" << std::endl;
    }
};
 
class heir: public parent
{
private:
    double* m_pd;
public:
    heir(int x, double y)
        :parent(x)
    {
        m_pd = new double(y);
        std::cout << "Constructor of the inherit class" << std::endl;
    }
    virtual ~heir()
    {
        delete m_pd;
        std::cout << "Destructor of the inherit class" << std::endl;
    }
};
 
int main()
{
    parent* pprn = new heir(8, 9.5);
    delete pprn;
    system("pause");
    return EXIT_SUCCESS;
}
Конструктор класса heir (производного) вызывает конструктор класса parent (базового), чтобы инициализировать поля базового класса. При вызове деструктора производного класса также автоматически вызывается деструктор базового класса, чтобы зачистить данные базового класса. Обрати внимание на результаты работы программы.

Добавлено через 4 минуты

Не по теме:

Цитата Сообщение от nikkka Посмотреть сообщение
извените за ошибку в назвнии темы - везде вместо слова "тип" должно быть слово "класс"
Можно говорить, что это синонимы.

[Freeman]
34 / 34 / 6
Регистрация: 07.06.2010
Сообщений: 118
08.07.2010, 12:33     что происходит со старым конструктором когда я создаю новый, пренадлежащий производному типу? (первый конструктор пренадлежит базовому типу) #3
Ничего с ним не происходит он по прежнему существует и участвует в создании обьектов производного
класса,сначала вызывается конструктор базового класса потом производного с деструкторами так же только вызываются они в порядке обратном конструкторам
nikkka
Мат в 32 хода
235 / 170 / 8
Регистрация: 10.09.2009
Сообщений: 1,096
08.07.2010, 12:42  [ТС]     что происходит со старым конструктором когда я создаю новый, пренадлежащий производному типу? (первый конструктор пренадлежит базовому типу) #4
а каким именем мне вызвать старый конструктор? (баз класс - class1, пр. класс class2)
Nameless One
Эксперт С++
5767 / 3416 / 255
Регистрация: 08.02.2010
Сообщений: 7,441
08.07.2010, 12:54     что происходит со старым конструктором когда я создаю новый, пренадлежащий производному типу? (первый конструктор пренадлежит базовому типу) #5
Смотри внимательно:
C++
1
2
3
4
5
6
heir(int x, double y)
     :parent(x)
 {
     m_pd = new double(y);
     std::cout << "Constructor of the inherit class" << std::endl;
}
В списке инициализации (по-моему, он так называется) конструктора производного класса heir вызывается конструктор базового класса parent.
usernet009
24 / 24 / 1
Регистрация: 28.12.2009
Сообщений: 85
08.07.2010, 14:37     что происходит со старым конструктором когда я создаю новый, пренадлежащий производному типу? (первый конструктор пренадлежит базовому типу) #6
Nameless One,
C++
1
2
3
4
5
        virtual ~heir()
        {
                delete m_pd;
                std::cout << "Destructor of the inherit class" << std::endl;
        }
Тут разве не delete []m_pd надо писать ?
Chevit
3 / 3 / 0
Регистрация: 06.07.2010
Сообщений: 18
08.07.2010, 16:54     что происходит со старым конструктором когда я создаю новый, пренадлежащий производному типу? (первый конструктор пренадлежит базовому типу) #7
Цитата Сообщение от usernet009 Посмотреть сообщение
Nameless One,
Тут разве не delete []m_pd надо писать ?
Можно писать ,но не обязательно, по крайней мере в С++
easybudda
Эксперт С++
9456 / 5469 / 927
Регистрация: 25.07.2009
Сообщений: 10,495
08.07.2010, 17:01     что происходит со старым конструктором когда я создаю новый, пренадлежащий производному типу? (первый конструктор пренадлежит базовому типу) #8
Цитата Сообщение от Chevit Посмотреть сообщение
Тут разве не delete []m_pd надо писать ?
Можно писать ,но не обязательно, по крайней мере в С++
Оператор delete [] должен возвращать память, выделенную оператором new [], то есть, если память выделялась для массива элементов, то и возвращаться должна сответственно. Если была выделена память для одного элемента (m_pn = new int(x)), то и возвращать нужно соответственно delete m_pn; Ошибки при использовании оператора delete[] возможно и не будет (даже скорее всего - массив из одного элемента - вещь не часто, но встречающаяся), но как-то это идеологически не правильно...
CheshireCat
Эксперт С++
2891 / 1240 / 78
Регистрация: 27.05.2008
Сообщений: 3,345
08.07.2010, 17:32     что происходит со старым конструктором когда я создаю новый, пренадлежащий производному типу? (первый конструктор пренадлежит базовому типу) #9
Сообщение было отмечено автором темы, экспертом или модератором как ответ
Дополню коллегу easybudda: это не только идеологически неправильно, но, в соответствии с правилами языка, прямо ведет к Undefined Behavior - неопределенному поведению программы.В 99% случаев это останется незамеченным, но в оставшемся 1% - программа рухнет, причем, по закону подлости, именно в момент демонстрации Самому Жирному Заказчику....
easybudda
08.07.2010, 19:12
  #10

Не по теме:

Цитата Сообщение от CheshireCat Посмотреть сообщение
программа рухнет, причем, по закону подлости, именно в момент демонстрации Самому Жирному Заказчику....
Это под какой-нибудь из законов Мёрфи попадает, я думаю...

MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
08.07.2010, 19:17     что происходит со старым конструктором когда я создаю новый, пренадлежащий производному типу? (первый конструктор пренадлежит базовому типу)
Еще ссылки по теме:

C++ Проверка на принадлежность к типу
Проверка переменной по типу C++
C++ Что происходит когда std::move применяется для int?
Приведение к типу C++
C++ 2IntelliSense: выражение должно относиться к целочисленному типу или типу перечисления без области видимости

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

Или воспользуйтесь поиском по форуму:
nikkka
Мат в 32 хода
235 / 170 / 8
Регистрация: 10.09.2009
Сообщений: 1,096
08.07.2010, 19:17  [ТС]     что происходит со старым конструктором когда я создаю новый, пренадлежащий производному типу? (первый конструктор пренадлежит базовому типу) #11
ага, закон Бьерна Мерфи..
Yandex
Объявления
08.07.2010, 19:17     что происходит со старым конструктором когда я создаю новый, пренадлежащий производному типу? (первый конструктор пренадлежит базовому типу)
Ответ Создать тему
Опции темы

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