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

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

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

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

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

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

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

Приведение к базовому типу - C++
#include <iostream> using namespace std; class A{ public: virtual ~A() {} }; class B: public A{ };

как в c++ проверить пренадлежит ли переменная определенному типу? - C++
Например, что бы если пользователь ввел не число а символ, то в консоль выводилось сообщение об ошибке.

2IntelliSense: выражение должно относиться к целочисленному типу или типу перечисления без области видимости - C++
"Выражение должно относиться к целочисленному типу или типу перечисления без области видимости" Что это за ошибка такая и как ее исправить?...

Что происходит когда std::move применяется для int? - C++
Мне, вроде бы, понятно как работает std::move() на классах типа string. Но мне непонятно что будет в данном случаи. #include <iostream> ...

Приведение к типу - C++
В чем разница? static_cast<int>(a); и (int)a

Проверка на принадлежность к типу - C++
Господа, подскажите, возможно ли проверять введенные данные на принадлежность к какому-либо типу данных, например число на int или float? ...

Приведение к типу-наследнику - C++
#include <iostream> class A { }; class B: public A { void foo() const { std::cout << "some is king of every fish"; } }; int...

После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Nameless One
Эксперт С++
5769 / 3418 / 255
Регистрация: 08.02.2010
Сообщений: 7,446
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
Эксперт С++
5769 / 3418 / 255
Регистрация: 08.02.2010
Сообщений: 7,446
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
Эксперт CЭксперт С++
9466 / 5479 / 927
Регистрация: 25.07.2009
Сообщений: 10,503
08.07.2010, 17:01     что происходит со старым конструктором когда я создаю новый, пренадлежащий производному типу? (первый конструктор пренадлежит базовому типу) #8
Цитата Сообщение от Chevit Посмотреть сообщение
Тут разве не delete []m_pd надо писать ?
Можно писать ,но не обязательно, по крайней мере в С++
Оператор delete [] должен возвращать память, выделенную оператором new [], то есть, если память выделялась для массива элементов, то и возвращаться должна сответственно. Если была выделена память для одного элемента (m_pn = new int(x)), то и возвращать нужно соответственно delete m_pn; Ошибки при использовании оператора delete[] возможно и не будет (даже скорее всего - массив из одного элемента - вещь не часто, но встречающаяся), но как-то это идеологически не правильно...
CheshireCat
Эксперт С++
2892 / 1241 / 78
Регистрация: 27.05.2008
Сообщений: 3,364
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++
Задался таким вопросом: можно ли сравнить переменную, которую принимает функция по ее типу и в зависимости от типа переменной выполняются...

Вопросы по типу char - C++
Читаю книгу Страуструпа. Дошёл до типа char. В книге приводится такой пример: #include &lt;iostream&gt; int main(){ char c; ...

Счетчик значений по типу электросчетчика - C++
Прошу помощи. Хочу реализовать счетчик, который будет считать значения, но не просто с 0, а с 000000, то есть счетчик похожий на счетчик...

Приложение по типу новостного сайта - C++
Здравствуйте, интересует вопрос, как сделать приложение по типу веб сайта. Суть приложения - вывод из базы новостей и при переходе по...

Невозможность приведения к стандартному типу - C++
Не могу привести к стандартному типу объект класса. Вот код: class Casting { private: double X; public: Casting() :...


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

Или воспользуйтесь поиском по форуму:
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