14 вопросов по С++
1.Что представляют из себя виртуальные функции? Как их реализовать на С?
2.Что из себя представляет бинарный поиск?
3.Что означает O(nlogn)?
4.Что такое рефакторинг?
5.Что из себя представляют паттерны проектирования?
6.Что такое автоматический указатель?
7.Что такое безымянная конструкция?
8.Понятие Exception Safety.
9.Что случится, если выделить память используя “new”, и освободить ее, используя “free”?:eek:
10.Есть что-то, что можно сделать в Си, но нельзя сделать в С++?
11.Что такое повисший указатель (dangling pointer)?
12.Что такое инвариант?
13.Что понимают под раскруткой стека?
14.Какие бывают виды памяти?
А создать просто - написав в h файле перед определением метода слово virtual.
6. Указатель, который автоматически удаляет из памяти указываемый объект.
sPointer <TStringList> pList = new TStringList(); // Создали
// Используем
return pList->Text; // Выход из функции
} //Конец блока кода, объект удалится сам
7. Структура, тип которой не имеет имени.
9. Не будет произведён автоматический вызов деструктора - не будут удалены другие объекты, созданные данным.
Зависит от реализации компилятора, предоставляемых им отладочных средств и средств контроля целостности памяти. CodeGuard, прилагаемый к Builder'у останавливает программу и громко матерится, про другие среды разработки не знаю.
11. Возможно, который указывает на освобождённую область памяти.
TA pA2 = pA1;
delete pA1;
// pA2 повис
P.S. Экзамен, чтоли начинается? В раздел "Студенты"
Вопрос не совсем корректен. Виртуальных функций не бывает, бывают виртуальные методы. Методы присущи классам, что не позволяет реализовать виртуальные методы в чистом С. Если, конечно, не заняться реализацией собственных извращений и не расширить С. ;)
Ответ здесь
Ответ здесь
Ответ здесь
В чистом С не силён, но, вроде бы, нет - С++ расширяет С и соответственно должен уметь всё, что умел С. Ну и два плюса в придачу. :)
Ответ здесь
Если мне не изменяет память, то под раскруткой стека понимают изъятие с него того, что туда накидали ранее.
Это смотря, в приложении к чему. Есть ROM, EPROM, RAM, DRAM, SRAM, например... А можно и так - оперативная, виртуальная, файл подкачки. :)
Если в приложении к программированию, то тоже разные варианты:
1. память программ и память данных;
2. код, данные и куча (для динамически выделяемых объектов).
2. код, данные и куча (для динамически выделяемых объектов).
3.стек
Память бывает:
а) по физическому расположению хранящихся данных: регистры процессора, микросхемы ОЗУ и файл подкачки на диске
а) по способу обращения программой: регистры, стек, "куча".
3.Что означает O(nlogn)?
Оценка сложности алгоритма. Точный ответ - google.com, Т. Кормен "Алгоритмы, построение и анализ". Прошу перенести тему в Студенты
12.Что такое инвариант?
Возьмём бинарный поиск. В теле алгоритма есть 2 указателя(итератора) , i,j -например. Тогда инвариант: Если искомый элемент в массиве есть, то он находится на отрезке [i.j] (в массиве).
10.Есть что-то, что можно сделать в Си, но нельзя сделать в С++?
Если речь идёт именно о языке - ответ "нет". Остальное определяется ОС.
Если речь идёт именно о языке - ответ "нет". Остальное определяется ОС.
При чем тут ОС ?
Самое мягкое предположение - автор имел в виду, что ядра OS Win и *nix написаны, процентов на 70, на С, и что функции их апи являются С-функциями. НО как это относится к языкам - не пойму.
Есть такая штука как auto_ptr, возможно он и имелся в виду. Реализует кроме всего еще и разрушающее копирование, т.е.
void foo(TObj * pO)
{
auto_ptr<TObj> a_pO1 = pO; // a_pO1 реализует контроль за указателем
auto_ptr<TObj> a_pO2 = pO; // a_pO2 реализует контроль за указателем
// а a_pO1 уже отдыхает
Лично сам редко пользуюсь "умным" указателем - проблемы с контейнерами и т.д.
Да и несколько таких указателей на один объект может привести к двойному уничтожению объекта, что ни есть правильно.
7. Exception Safety
Безопасная работа с исключениями. Когда все исключения должны быть отловлены и обработаны, управление возвращалась программе,а не приводило к связке terminate() - abort() (хотя есть еще и set_terminate()), все исключения критичные для продолжения работы должны приводить к корректному ее завершению и т.д. более подробней Саттер
Спасибо всем за внимание. Закрывайте тему.
Это не имел в виду :) Когда говорят про Си или Си++, то обязательно не забывают , про их Standard Library. Как вы знаете там некоторые ф-ции во-первых зависят от ОС, во-вторых, некоторых в винде и вовсе уже не стало. В третьих, режим ядра/режим защищенный , ну наконец модель памяти, разные размеры для типов данных итд. пример : беру досовский Борланд Си и мучу графику - в современном Си++ неактуально. Или же беру тот же Си и мучу работу с Дос прерываниями.
14.Какие бывают виды памяти?
Данный вопрос наверняка относить в классу памяти. На такою постановку вопроса ответ следующий:
auto, extern, register, static
Для получения более подробной информации, читайте книги по С++, там данный вопрос рассматривается.