Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.57/7: Рейтинг темы: голосов - 7, средняя оценка - 4.57
Мат в 32 хода
 Аватар для nikkka
237 / 172 / 18
Регистрация: 10.09.2009
Сообщений: 1,096
1

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

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

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

извените за ошибку в назвнии темы - везде вместо слова "тип" должно быть слово "класс".
0
Лучшие ответы (1)
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
08.07.2010, 11:26
Ответы с готовыми решениями:

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

Приведение к базовому типу. Полиморфизм
Здравствуйте! Объясните, пожалуйста, почему в следующем внизу коде всегда вызывается...

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

Generic Типы и UpCast к базовому интерфейсному типу(ковариантность обобщений)
Всем привет, имеется следующий код: public abstract class Shape { } public class Circle :...

10
Эксперт С++
 Аватар для Nameless One
5828 / 3479 / 358
Регистрация: 08.02.2010
Сообщений: 7,448
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 Посмотреть сообщение
извените за ошибку в назвнии темы - везде вместо слова "тип" должно быть слово "класс"
Можно говорить, что это синонимы.

2
34 / 34 / 8
Регистрация: 07.06.2010
Сообщений: 118
08.07.2010, 12:33 3
Ничего с ним не происходит он по прежнему существует и участвует в создании обьектов производного
класса,сначала вызывается конструктор базового класса потом производного с деструкторами так же только вызываются они в порядке обратном конструкторам
1
Мат в 32 хода
 Аватар для nikkka
237 / 172 / 18
Регистрация: 10.09.2009
Сообщений: 1,096
08.07.2010, 12:42  [ТС] 4
а каким именем мне вызвать старый конструктор? (баз класс - class1, пр. класс class2)
0
Эксперт С++
 Аватар для Nameless One
5828 / 3479 / 358
Регистрация: 08.02.2010
Сообщений: 7,448
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.
1
 Аватар для usernet009
26 / 26 / 5
Регистрация: 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 надо писать ?
1
3 / 3 / 0
Регистрация: 06.07.2010
Сообщений: 18
08.07.2010, 16:54 7
Цитата Сообщение от usernet009 Посмотреть сообщение
Nameless One,
Тут разве не delete []m_pd надо писать ?
Можно писать ,но не обязательно, по крайней мере в С++
1
Модератор
Эксперт PythonЭксперт JavaЭксперт CЭксперт С++
 Аватар для easybudda
12836 / 7572 / 1765
Регистрация: 25.07.2009
Сообщений: 13,969
08.07.2010, 17:01 8
Цитата Сообщение от Chevit Посмотреть сообщение
Тут разве не delete []m_pd надо писать ?
Можно писать ,но не обязательно, по крайней мере в С++
Оператор delete [] должен возвращать память, выделенную оператором new [], то есть, если память выделялась для массива элементов, то и возвращаться должна сответственно. Если была выделена память для одного элемента (m_pn = new int(x)), то и возвращать нужно соответственно delete m_pn; Ошибки при использовании оператора delete[] возможно и не будет (даже скорее всего - массив из одного элемента - вещь не часто, но встречающаяся), но как-то это идеологически не правильно...
2
Эксперт С++
2924 / 1274 / 114
Регистрация: 27.05.2008
Сообщений: 3,465
08.07.2010, 17:32 9
Лучший ответ Сообщение было отмечено как решение

Решение

Дополню коллегу easybudda: это не только идеологически неправильно, но, в соответствии с правилами языка, прямо ведет к Undefined Behavior - неопределенному поведению программы.В 99% случаев это останется незамеченным, но в оставшемся 1% - программа рухнет, причем, по закону подлости, именно в момент демонстрации Самому Жирному Заказчику....
3
easybudda
08.07.2010, 19:12
  #10

Не по теме:

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

0
Мат в 32 хода
 Аватар для nikkka
237 / 172 / 18
Регистрация: 10.09.2009
Сообщений: 1,096
08.07.2010, 19:17  [ТС] 11
ага, закон Бьерна Мерфи..
0
08.07.2010, 19:17
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
08.07.2010, 19:17
Помогаю со студенческими работами здесь

Определить, что происходит при вводе значений, не соответствующих требуемому типу или выходящих за пределы
Не проходили C#, но задали задания, вообще не в курсе как делать. Построить циклическое...

Выражение должно относиться к целочисленному типу или типу перечисления без области видимости
Добрый день,столкнулся с проблемой &quot;Выражение должно относиться к целочисленному типу или типу...

Выражение должно относиться к целочисленному типу или типу перечисления без области видимости
#include &lt;iostream&gt; #include &lt;cmath&gt; using namespace std; int main() { int N; double Y = 0;...

Выражение должно относиться к целочисленному типу или типу перечисления без области видимости
#include &quot;pch.h&quot; #include &lt;iostream&gt; #include &lt;conio.h&gt; #include &lt;string&gt; #include &lt;fstream&gt; ...


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

Или воспользуйтесь поиском по форуму:
11
Ответ Создать тему
Новые блоги и статьи
Как в цикле обойти все поля объекта в JavaScript
bytestream 28.01.2025
Объекты в JavaScript представляют собой фундаментальные структуры данных, которые позволяют хранить и организовывать связанную информацию в виде пар ключ-значение. Каждый объект можно представить как. . .
Как выбрать строки в DataFrame по значению столбца в Pandas
bytestream 28.01.2025
В области анализа данных библиотека Pandas стала незаменимым инструментом для работы с табличными данными в Python. Эта мощная библиотека предоставляет множество функций для эффективной обработки и. . .
Как сделать перенос строки в Bash
bytestream 28.01.2025
При работе с командной оболочкой Bash разработчики часто сталкиваются с необходимостью форматирования текстового вывода, где ключевую роль играет правильное управление переносами строк. Умение. . .
Поиск подстроки в строке с помощью Bash
bytestream 28.01.2025
Поиск подстроки в строке является одной из важных задач в программировании и обработке текстов. Применение такого поиска можно найти в самых разных областях, от анализа данных до разработки. . .
[golang] 169. Majority Element
alhaos 28.01.2025
Тут надо вернуть "мажористый" элемент который встречается в слайсе больше чем в половине случаев. По условиям задачи во входных данных такой элемент обязан присутствовать. / / . . .
Когда лучше использовать LinkedList вместо ArrayList в Java
bytestream 28.01.2025
При разработке Java-приложений выбор правильной структуры данных играет ключевую роль в обеспечении эффективности и производительности программы. ArrayList и LinkedList являются двумя. . .
Какой ответ HTTP лучше использовать: 403 Forbidden или 401 Unauthorized, когда недостаточно прав
bytestream 28.01.2025
В современной веб-разработке правильная обработка ошибок и точное информирование клиентов о статусе их запросов играют критическую роль в создании надежных и безопасных приложений. Особое внимание. . .
Как получить список всех файлов коммита в Git
bytestream 28.01.2025
Система контроля версий Git представляет собой мощный инструмент для управления изменениями в программном коде и других файлах проекта. В основе работы Git лежит концепция коммитов - снимков. . .
Как записать только часть изменений файла в Git
bytestream 28.01.2025
В процессе разработки программного обеспечения часто возникает необходимость сохранить только определенные изменения из множества внесенных правок в файлах. Система контроля версий Git предоставляет. . .
[golang] 80. Remove Duplicates from Sorted Array II
alhaos 28.01.2025
В предоставленном упорядоченном по возрастанию целочисленном слайсе, оставить уникальные элементы полюс один возможный дубликат. Вернуть количество таких элементов. / / . . .
Что такое внедрение зависимостей и для чего оно применяется
bytestream 27.01.2025
В современной разработке программного обеспечения одной из ключевых проблем является управление зависимостями между различными компонентами системы. Внедрение зависимостей (Dependency Injection, DI). . .
Как установить cellpadding и cellspacing в CSS
bytestream 27.01.2025
При создании веб-страниц с табличными данными разработчики часто сталкиваются с необходимостью правильного оформления внутренних и внешних отступов в таблицах. В традиционной разметке HTML для этих. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru