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

Создание классов в С++. Раздельная компиляция - C++

Восстановить пароль Регистрация
Другие темы раздела
C++ Метод "игрок берет все карты" не срабатывает как надо http://www.cyberforum.ru/cpp-beginners/thread1170363.html
void Player::MoveAllCardFromArea(Player x) //переместить карты из полей обоих игроков в собственность игрока, вызывающего функцию (игрок берет карты) { while (GetAreaSize()>0) //пока есть карты в поле в AddCard(GetAndDeleteArea()); //срабатывает нормально while (x.GetAreaSize()>0) AddCard(x.GetAndDeleteArea()); //ВОТ - возвращает...
C++ Напечатать слова у которых первая и последняя буква совпадают Напечатать слова у которых первая и последняя буква совпадают http://www.cyberforum.ru/cpp-beginners/thread1170337.html
C++ Ввод данных в консоль
Если я хочу ввести одну переменную в консоль, то чтобы ввести другую переменную, мне обязательно нужно нажать Enter. Есть ли возможность прописать в коде, какую кнопку нажать (интересует Пробел и Enter), чтобы ввести новую переменную. Заранее спасибо.
Написать блок схему C++
Написать блок схему. Дан массив из N элементов. Найти сумму чётных положительных элементов.
C++ Реверсировать пять средних элементов вашего вектора http://www.cyberforum.ru/cpp-beginners/thread1170302.html
Помогите с заданием. В STL имеется алгоритм void reverse( Iterator _First, Iterator _Last ), который можно применять к контейнерами с произвольным доступом для изменения на обратный порядка следования его элеменов, заключенных в интервале First … Last. Примените его для того, чтобы реверсировать пять средних элементов вашего вектора.
C++ Логический оператор or Мне, правда, очень стыдно :) но я не понимаю, как правильно прописать следующее: cin >> n; if (n != (1|5|25)){ cout << "\n bla bla\n";} else{ так вот работает: if (n != 5){ cout << "\n bla bla\n";} подробнее

Показать сообщение отдельно
Melg
418 / 154 / 62
Регистрация: 23.09.2013
Сообщений: 306
08.05.2014, 20:33     Создание классов в С++. Раздельная компиляция
Поговорим о единицах трансляции Каждый раз когда ваш VS компилирует проект он обрабатывает набор переданных ему .cpp файлов - эти файлы содержат исходный код реализации (определения методов/классов/функций/переменных) Данные файлы посредством компиляции преобразуются в .o - объектные файлы, содержащие машинный код. Каждый из .cpp файлов может компилироваться как самостоятельная единица. Но как же быть, когда в одном .cpp файле нужно вызвать функцию из другого .cpp файла - тут то на помощь и приходят .h файлы - В них содержится код объявлений (объявления методов/функций/переменных). Каждый раз, когда программист хочет использовать некоторую фукнцию более одного раза, он во-первых, помещает определение функции в .cpp файл, а объявление - в .h - файл, во-вторых, во всех .cpp файлах, где необходимо использовать функцию он добавляет директиву препроцессора #include "somefilewithourfoo.h". Препроцессор обрабатывает исходные коды в .cpp файлах еще до компилятора - просто как текст, он заменяет директиву - всем содержимым .h файла. За счет этого гарантируется, что в двух разных .cpp файлах будет содержаться одинаковое объявление классов/функций/методов. Возвращаясь к вопросу компиляции - когда отдельные .o файлы получены, осталось соединить всё вместе - для этого существует линковщик. Если в коде программы находится вызов функции, определение которой не дано в той же единице трансляции (том-же .cpp файле) - то вместо него используется заглушка, которая должна быть заменена линковщиком - на смещение - после нахождение определения этой функции - в другой единице трансляции. Для линковщика какраз и важно совпадение объявлений и определений функций - если таковое не найдено - будет выдана ошибка линковки и собрать программу до конца не удастся. < - Это, быть может слегка сумбурно - на тему "зачем они". А в целом - в .h нужно писать объявления классов (имя класса, объявления публичных и приватных метдов, полей и т.д.) в .cpp файле нужно писать определения конкретных методов, полей и т.д. - В конечном счете компилируются только .cpp файлы, а .h - включаются в них при помощи препроцессора.
Если нормально воспринимаете материал в лекционном формате, советую посмотреть http://www.youtube.com/watch?v=2uZlh7ZmOiM - какраз рассматривается подробно программа состоящая из нескольких файлов, и как вообще устроен процесс преобразования исходных кодов понятных человеку, в машинные коды.
 
Текущее время: 01:42. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru