Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.80/5: Рейтинг темы: голосов - 5, средняя оценка - 4.80
1 / 1 / 0
Регистрация: 11.12.2017
Сообщений: 44

Теоретические вопросы по азам С++

11.12.2017, 12:51. Показов 1141. Ответов 21
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
1. в каких случаях надо писать конструктор по умолчанию?
Если нету своего констуктора с аргументами.
2. когда нужно реализовать самому конструктор копирования?
Вот этого я не знаю((
3. когда можно не реализовать самом конструктор копирования?
Станадарный вызовется при кампиляции. Но когда не нужно я не знаю((
4. в каких случаях надо писать собственный оператор присваивания?
Вот этого я не знаю((
5. в каких случаях оператор присваивания нельзя не реализовать самому?
Вот этого я не знаю((
6. можно запретить вызов конструктора по умолчанию. если да то как?
да, delete C++11, или в private записать конструктор
7. можно вызвать виртуальную ф-ю из конструктора класса?
нет
8. можно вызвать виртуальную ф-ю с декструктора класса?
да можно
9. какая временная оценка поиска элемента в массиве по сравнению с хэш таблицей?
O(1)

Напишите что правильно, а что нет и почему не првально+ на что я незнаЮ. если можно напишите ответ или книгу где я могу про это прочитать
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
11.12.2017, 12:51
Ответы с готовыми решениями:

Теоретические вопросы по С++
Нужна помощь в ответах на несколько вопросов. Помогите плз!:) 1) Как инициализировать переменную, являющуюся приватным статическим...

Классы, теоретические вопросы
Помогите, пожалуйста, подготовиться к проверке в универе, ответив на эти вопросы) не могу найти ответы) 1)какие способы можно применять...

Теоретические вопросы по функциям в языке С и C++
Доброго времени суток, если Вас не затруднит, помогите найти ответ по следующим вопросам: 1) Как ограничить область видимости...

21
 Аватар для QuakerRUS
1469 / 1010 / 456
Регистрация: 30.10.2017
Сообщений: 2,799
11.12.2017, 13:30
Вопросы 1-8 рассматриваются например у Дейтелов в рамках разделов: классы, перегрузка операций, полиморфизм. Наверное в более свежих учебниках тоже есть ответы на эти вопросы.
0
440 / 432 / 159
Регистрация: 21.05.2016
Сообщений: 1,338
11.12.2017, 13:55
9. У массива O(N)
0
16 / 17 / 3
Регистрация: 23.09.2017
Сообщений: 39
11.12.2017, 15:30
Цитата Сообщение от olena_nov Посмотреть сообщение
в каких случаях надо писать конструктор по умолчанию?
Если он нужен, а тот, который генерирует компилятор не соответствует нашим требованиям, либо он совсем не генерируется.
Цитата Сообщение от olena_nov Посмотреть сообщение
когда нужно реализовать самому конструктор копирования?
Если он нужен, а тот, который генерирует компилятор не соответствует нашим требованиям, либо он совсем не генерируется.
Цитата Сообщение от olena_nov Посмотреть сообщение
когда можно не реализовать самом конструктор копирования?
Если конструктор, который генерирует компилятор соответствует нашим требованиям.
Цитата Сообщение от olena_nov Посмотреть сообщение
в каких случаях надо писать собственный оператор присваивания?
Если он нужен, а тот, который генерирует компилятор не соответствует нашим требованиям, либо он совсем не генерируется.
Цитата Сообщение от olena_nov Посмотреть сообщение
в каких случаях оператор присваивания нельзя не реализовать самому?
Хочешь - реализовываешь, не хочешь - нет.
Цитата Сообщение от olena_nov Посмотреть сообщение
можно запретить вызов конструктора по умолчанию. если да то как?
Удалить его; объявить в private и не определять; объявить не дефолтный конструктор, чтобы компилятор не генерировал дефолтный.
Цитата Сообщение от olena_nov Посмотреть сообщение
можно вызвать виртуальную ф-ю из конструктора класса?
Можно. Естевственно, нужно понимать, почему "виртуальности" при этом не видать.
Цитата Сообщение от olena_nov Посмотреть сообщение
можно вызвать виртуальную ф-ю с декструктора класса?
Можно. Естевственно, нужно понимать, почему "виртуальности" при этом не видать.
Цитата Сообщение от olena_nov Посмотреть сообщение
какая временная оценка поиска элемента в массиве по сравнению с хэш таблицей?
Смотря как сложены элементы и как организован поиск. Элементы могут быть упорядочены, тогда можно использовать бинарный поиск.
А может быть на массиве реализована хеш-таблица.
1
Комп_Оратор)
Эксперт по математике/физике
 Аватар для IGPIGP
9006 / 4707 / 630
Регистрация: 04.12.2011
Сообщений: 14,003
Записей в блоге: 16
11.12.2017, 18:52
Цитата Сообщение от LimeBush Посмотреть сообщение
можно вызвать виртуальную ф-ю с декструктора класса?
Можно. Естественно, нужно понимать, почему "виртуальности" при этом не видать.
В деструкторе (виртуальном) - видать.
0
16 / 17 / 3
Регистрация: 23.09.2017
Сообщений: 39
12.12.2017, 20:38
Цитата Сообщение от IGPIGP Посмотреть сообщение
В деструкторе (виртуальном) - видать.
Советую получше познакомиться с виртуальностью.
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
#include <iostream>
 
 
struct Base
{
    virtual void foo()
    {
        std::cout << "Base::foo" << std::endl;
    }
    virtual ~Base()
    {
        foo();//Не виртуальный вызов по вполне очевидным причинам
    }
};
 
 
struct Derived: Base
{
    virtual void foo()
    {
        std::cout << "Derived::foo" << std::endl;
    }
};
 
 
 
int main()
{
    Base *p = new Derived();
    delete p;
}
https://ideone.com/pYpEGS
0
7804 / 6568 / 2988
Регистрация: 14.04.2014
Сообщений: 28,705
12.12.2017, 20:46
LimeBush, поясни.
0
16 / 17 / 3
Регистрация: 23.09.2017
Сообщений: 39
12.12.2017, 20:50
nmcf, что пояснить? Почему вызывается Base::foo, а не Derived::foo?

P.S. По поводу не виртуального вызова - имеется ввиду, что вызовется функция этого класса, либо предка, но не наследника.
0
 Аватар для Kuzia domovenok
4268 / 3327 / 926
Регистрация: 25.03.2012
Сообщений: 12,532
Записей в блоге: 1
12.12.2017, 20:56
Вопросы довольно абстрактные. Ну вот например, как понимать «когда нужен конструктор копирования»?
Классический ответ - «когда у нас в классе хранится указатель»
Но ведь тут же не обязательно именно указатель - указатели это лишь один из примеров обоснования необходимости конструктора копий! Можно привести примеры классов, содержащих не указатели, а скажем дескрипторы каких-либо ресурсов, типа: файлов, сокетов, мьютексов, потоков И так далее...
Ну и как все эти примеры обобщить одной фразой, чтобы она при этом содержала конкретику?!
Я скажу, конструктор копий нужен, когда логическое представление экземпляра класса может хранить в себе нечто большее, чем набор из его sizeof байт!

Но ведь это настолько неконкретно-расплывчатые слова!!!
0
16 / 17 / 3
Регистрация: 23.09.2017
Сообщений: 39
12.12.2017, 21:03
nmcf, C++14 12.7/4
Member functions, including virtual functions (10.3), can be called during construction or destruction (12.6.2). When a virtual function is called directly or indirectly from a constructor or from a destructor, including during the construction or destruction of the class’s non-static data members, and the object to which the call applies is the object (call it x) under construction or destruction, the function called is the final overrider in the constructor’s or destructor’s class and not one overriding it in a more-derived class. If the virtual function call uses an explicit class member access (5.2.5) and the object expression refers to the complete object of x or one of that object’s base class subobjects but not x or one of its base class subobjects, the behavior is undefined.
2
Комп_Оратор)
Эксперт по математике/физике
 Аватар для IGPIGP
9006 / 4707 / 630
Регистрация: 04.12.2011
Сообщений: 14,003
Записей в блоге: 16
12.12.2017, 22:25
LimeBush,
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
#include <iostream>
 
struct Base
{
    virtual void foo()
    {
        std::cout << "Base::foo" << std::endl;
    }
    virtual ~Base()
    {
        foo();//Не виртуальный вызов по вполне очевидным причинам (??)
    }
};
 
 
struct Derived: Base
{
    virtual void foo()
    {
        std::cout << "Derived::foo" << std::endl;
    }
    ~Derived(){// чтобы использовать виртуальный деструктор его нужно определить
        //а не определяя его мы показываем незнание азов
 foo();//чтобы использовать виртуальный метод - его надо вызвать
    }
};
 
 
 
int main()
{
    Base *p = new Derived();
    delete p;
    //Derived::foo
    //Base::foo
    //в обратном порядке как и должно быть
    //деструктор, как уже было сказано, нужно определить, так как он не наследуется
    //советую разобраться с базовыми понятиями 
 
    std::cin.get();
}
Цитата Сообщение от LimeBush Посмотреть сообщение
Советую получше познакомиться с виртуальностью.
Спасибо, с этим и не только этим, я постоянно продолжаю знакомство и и это процесс практически нескончаемый. Советую и вам не останавливаться на вашем уровне. Работы ещё много.
0
16 / 17 / 3
Регистрация: 23.09.2017
Сообщений: 39
12.12.2017, 22:58
Цитата Сообщение от IGPIGP Посмотреть сообщение
чтобы использовать виртуальный метод - его надо вызвать
То, что вызывает foo из Derived в твоем коде обусловлено не виртуальностью, а тем, что foo вызывается из Derived. Вызов foo в Base приводит к вызову Base::foo, а не Derived::foo.
Можешь убрать у foo виртуальность и получишь то же самое. Ты какую-то необъяснимую лабуду написал, которая к рассматриваемому вопросу отношения не имеет. Виртуальность предполагает позднее связывание. В деструкторе объекта-наследника уже нет, поэтому будет вызов функции из текущего класса (либо из предка, либо неопределенное поведение в случае, описанном выше цитатой из стандарта).
Цитата Сообщение от IGPIGP Посмотреть сообщение
//в обратном порядке как и должно быть
Это вообще из другой оперы. Вызывается деструктор Derived, который потом вызывает деструктор Base. Но, как видим, в деструкторе Base вызывается Base::foo, а не Derived::foo (хотя создавали мы объект Derived), потому как подобъекта Derived уже нет, он умер.
Цитата Сообщение от IGPIGP Посмотреть сообщение
foo();//чтобы использовать виртуальный метод - его надо вызвать
Ты показал какую-то хрень. Повторюсь опять, убери у foo виртуальность и получишь тоже самое. Ты пример привел, который полностью обрубает твою теорию, т.к. в твоем коде, что виртуальна foo, что нет, в деструкторе она ведет себя одинаково.
http://rextester.com/FOF9270
Цитата Сообщение от IGPIGP Посмотреть сообщение
деструктор, как уже было сказано, нужно определить, так как он не наследуется
Продолжай, полезно.
Цитата Сообщение от IGPIGP Посмотреть сообщение
советую разобраться с базовыми понятиями
И всё-таки вернись к основам, тебе будет полезно.
0
12.12.2017, 23:07

Не по теме:

Заколебали оффтопить! Тут аффтар вообще есть??!

0
Комп_Оратор)
Эксперт по математике/физике
 Аватар для IGPIGP
9006 / 4707 / 630
Регистрация: 04.12.2011
Сообщений: 14,003
Записей в блоге: 16
12.12.2017, 23:09
Цитата Сообщение от LimeBush Посмотреть сообщение
Ты какую-то необъяснимую лабуду написал, которая к рассматриваемому вопросу отношения не имеет.
Со временем вы поймёте что имеет. Или не поймёте.
Цитата Сообщение от LimeBush Посмотреть сообщение
Ты показал какую-то хрень.
Я не позволял вам обращаться на "ты" и притом с как вы выражаетесь "хренью".
То что вы не понимаете, что деструктор это виртуальный метод (с рядом особенностей), это выше дело. Но учить этому вам никого не нужно.
Если объявлен виртуальный метод, то виртуальностью можно воспользоваться лишь переопределив такой метод. Нет ничего особенного в том, что не переопределив деструктор его и не удастся запустить для наследника. С другой стороны, даже определив деструктор наследника, нужно понимать, что деструктор подкласса (родителя) может деинициализировать частьданных, относящихся к подклассу и быть осторожным при вызове виртуальных методов в виртуальных де6структорах. Но вызывать их можно. И в этом вы написали неправду. Впрочем, судя по вашему обращению, вам не нужно это всё. Поэтому, отвечать вам больше не буду.
0
12.12.2017, 23:11

Не по теме:

IGPIGP, перечитай тему еще раз, может до тебя дойдет, что ты хрень пишешь. Покеда.

0
Комп_Оратор)
Эксперт по математике/физике
 Аватар для IGPIGP
9006 / 4707 / 630
Регистрация: 04.12.2011
Сообщений: 14,003
Записей в блоге: 16
12.12.2017, 23:12
Цитата Сообщение от Kuzia domovenok Посмотреть сообщение
Заколебали оффтопить! Тут аффтар вообще есть??!
Речь идёт о вызове виртуального метода в деструкторе. Это просто неверно, что такой метод нельзя вызвать в деструкторе и всё. А грубость... Это не о С++.
Но это не оффтоп. Вот неверное утверждение и я об этом сказал:
Цитата Сообщение от LimeBush Посмотреть сообщение
можно вызвать виртуальную ф-ю с декструктора класса?
Можно. Естевственно, нужно понимать, почему "виртуальности" при этом не видать.
0
1 / 1 / 0
Регистрация: 11.12.2017
Сообщений: 44
13.12.2017, 14:05  [ТС]
Kuzia domovenok, есть. и я уже запуталась) по теме я только не много поняла.
0
16 / 17 / 3
Регистрация: 23.09.2017
Сообщений: 39
13.12.2017, 15:14
Цитата Сообщение от olena_nov Посмотреть сообщение
по теме я только не много поняла.
Вопрос, как уже написали, не корректные. На них нет прямого ответа. Всё сводится к ответу: делай так тогда, когда надо, либо когда нет возможности не делать.
0
183 / 181 / 66
Регистрация: 15.02.2015
Сообщений: 515
13.12.2017, 16:09
По поводу 2, 3, 4 ,5 - прочитайте про "правило трёх", потом про "правило пяти", а потом про "правило нуля". Опять же эти "правила" лишь рекомендации, можно спокойно программировать на "Си с классами" и делать рабочий продукт.
0
Эксперт С++
 Аватар для hoggy
8973 / 4319 / 960
Регистрация: 15.11.2014
Сообщений: 9,760
13.12.2017, 16:27
Цитата Сообщение от LimeBush Посмотреть сообщение
что пояснить? Почему вызывается Base::foo, а не Derived::foo?
нет. с этим как раз таки понятно.

не понятно, с чего вы решили,
что вирт. механизма при этом "не видать".

Цитата Сообщение от LimeBush Посмотреть сообщение
По поводу не виртуального вызова - имеется ввиду, что вызовется функция этого класса, либо предка, но не наследника.
это не делает вызов "не виртуальным"
полиморфная природа самого вызова никуда не девается.

Цитата Сообщение от LimeBush Посмотреть сообщение
нужно понимать, почему "виртуальности" при этом не видать.
на практике наглядно видно:
работает как часики.

не очевидно с чего вы взяли своё "не видать".
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
13.12.2017, 16:27
Помогаю со студенческими работами здесь

Ответить на теоретические вопросы по заданному фрагменту кода
Приведенный фрагмент программы struct point //шаблон для хранения координат точки { int x, y; } z; FILE *f; f = fopen( “point...

Теоретические вопросы по БД
Доброго времени суток, форумчане и гости. Затаился в голове вопросов кучка. (С бд на уровне # не знаком ни коим образом) 1....

Теоретические вопросы
Добрый вечер всем, прошу помочь с ответами на такие вопросы: 1. Описать поведение TCP если пакет отправлен но не доставлен? 2. Решение...

Теоретические вопросы
1) Работа с клавиатурой в прграмме на алгоритмическом языке VB 2)Шаблон строк, Как оформить?Для чего используется шаблон строк 3)как...

Теоретические вопросы по c#
Привет всем) у меня есть пару вопросов по c#: 1) Почему структуры типа datetime могут вычитаться друг из друга, а обычные структуры...


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

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Новые блоги и статьи
SDL3 для Web (WebAssembly): Реализация движения на Box2D v3 - трение и коллизии с повёрнутыми стенами
8Observer8 20.02.2026
Содержание блога Box2D позволяет легко создать главного героя, который не проходит сквозь стены и перемещается с заданным трением о препятствия, которые можно располагать под углом, как верхнее. . .
Конвертировать закладки radiotray-ng в m3u-плейлист
damix 19.02.2026
Это можно сделать скриптом для PowerShell. Использование . \СonvertRadiotrayToM3U. ps1 <path_to_bookmarks. json> Рядом с файлом bookmarks. json появится файл bookmarks. m3u с результатом. # Check if. . .
Семь CDC на одном интерфейсе: 5 U[S]ARTов, 1 CAN и 1 SSI
Eddy_Em 18.02.2026
Постепенно допиливаю свою "многоинтерфейсную плату". Выглядит вот так: https:/ / www. cyberforum. ru/ blog_attachment. php?attachmentid=11617&stc=1&d=1771445347 Основана на STM32F303RBT6. На борту пять. . .
Камера Toupcam IUA500KMA
Eddy_Em 12.02.2026
Т. к. у всяких "хикроботов" слишком уж мелкий пиксель, для подсмотра в ESPriF они вообще плохо годятся: уже 14 величину можно рассмотреть еле-еле лишь на экспозициях под 3 секунды (а то и больше),. . .
И ясному Солнцу
zbw 12.02.2026
И ясному Солнцу, и светлой Луне. В мире покоя нет и люди не могут жить в тишине. А жить им немного лет.
«Знание-Сила»
zbw 12.02.2026
«Знание-Сила» «Время-Деньги» «Деньги -Пуля»
SDL3 для Web (WebAssembly): Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 12.02.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами и вызывать обработчики событий столкновения. . . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 11.02.2026
Содержание блога Библиотека SDL3 содержит встроенные инструменты для базовой работы с изображениями - без использования библиотеки SDL3_image. Пошагово создадим проект для загрузки изображения. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru