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

Реализация класса - C++

Восстановить пароль Регистрация
Другие темы раздела
C++ case -> if http://www.cyberforum.ru/cpp-beginners/thread858374.html
Надо переделать с си++ на си, т.е. case на if while(choice != 4) { switch(choice) { case 1: add_student(); break; case 2:
C++ Составить функцию нахождения максимального элемента Мх в диагонали матрицы, параллельной главной диагонали Пожалуйста помогите с решением задачи на С++ Составить функцию нахождения максимального элемента Мх в диагонали матрицы, параллельной главной диагонали. Используя эту функцию в матрице F. Найти сумму максимальных элементов Мх всей диагонали, лежащих выше побочной, а в матрице E - произведение минимальных элементов Мх всей диагонали, лежащих ниже побочной http://www.cyberforum.ru/cpp-beginners/thread858366.html
Exception C++
Реализовать свой класс исключений zero, производный от std::exception (используется при попытке деления вектора на ноль). В классе zero должна быть перегружена функция what(). Функция должна возвращать строку "division_by_zero". помогите его реализовать
C++ Шифр перестановки "Скитала"
Привет всем) помогите написать шифр перестановки "Скитала" на С++
C++ UTF8 To Char http://www.cyberforum.ru/cpp-beginners/thread858330.html
Помогите с задачкой! Мне надо сделать программу которая переводит строки из UTF8 в нормальный текст и обратно (норм текст это русские буквы и несколько символов) Пытался искать в интернете нечего не нашел чтобы помогло! (или плохо искал) Заранее спасибо!
C++ Ошибка proga.exe": Загружено: "C:\Users\DRIVE\Documents\Visual Studio 2010\Projects\proga\Debug\proga.exe", Символы загружены. "proga.exe": Загружено: "C:\Windows\SysWOW64\ntdll.dll", Невозможно найти или открыть файл PDB "proga.exe": Загружено: "C:\Windows\SysWOW64\kernel32.dll", Невозможно найти или открыть файл PDB "proga.exe": Загружено: "C:\Windows\SysWOW64\KernelBase.dll", Невозможно найти или... подробнее

Показать сообщение отдельно
silent_1991
Эксперт C++
4938 / 3014 / 149
Регистрация: 11.11.2009
Сообщений: 7,024
Завершенные тесты: 1
14.05.2013, 17:25     Реализация класса
Цитата Сообщение от Aliru Посмотреть сообщение
а после линковщика идет исполнение кода с помощью ОС в памяти
После линковки получается исполняемый файл. Линковщик не запускает файл на исполнение, он только его генерирует. Запускаете файл вы самостоятельно (или не запускаете, это уже на ваше усмотрение).
Цитата Сообщение от Aliru Посмотреть сообщение
А кто тогда определение подставляет в вызов функции? Линковщик?
"Всё смешалось в доме Облонских". И у вас вот тоже всё смешалось. Определение (т.е. реализацию, тело) функции никто никуда не подставляет. Вызов функции - это действительно вызов. Т.е. переход из одного места исполняемого кода в другое (которое может находится и в другом месте памяти, не принадлежащем процессу, см. динамические библиотеки). Как вы верно сказали, компилятор при генерации объектного кода оставляет "пробелы" в коде, которые заполняет линковщик, но заполняет он их не реализациями вызываемых функций, а адресами этих функций в памяти. Делается так потому, что на стадии компиляции эти адреса ещё не известны, поскольку в один момент времени компилятор имеет дело только с одной единицей трансялции, в которой может не быть (и зачастую не бывает) определений всех используемых функций. Информация обо всём известна только после того, как будут откомпилированы все исходные файлы программы, т.е. только на стадии линковки. Когда при выполнении кода управление доходит до инструкции вызова функции - происходит переход на первую исполняемую инструкцию этой функции. Линковщик - не препроцессор, никакой подстановки кода при его работе не происходит.
P.S. Стоит оговориться, что иногда подстановка тела функции в место её вызова выполняется, но занимается этим компилятор. К тому же, можно намекнуть компилятору, что неплохо было бы сделать некоторую функцию встраиваемой, для этого служит ключевое слово inline. Но внемлет ли компилятор вашим рекомендациям, зависит только от него. К тому же, на встраиваемые функции налагаются некоторые ограничения (например, невозможно встроить рекурсивную функцию). Подробнее об этом можно почитать в стандарте языка (где же ещё, как не там?), тем более с английским у вас проблем нет.
 
Текущее время: 14:43. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru