Форум программистов, компьютерный форум, киберфорум
Наши страницы

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
 
SergioO
95 / 184 / 63
Регистрация: 13.12.2015
Сообщений: 1,000
#1

Раздельная компиляция (нюансы использования заголовочных файлов и файлов реализации) - C++

07.01.2016, 14:01. Просмотров 644. Ответов 21
Метки нет (Все метки)

Почему во многих учебниках функции-члены класса внутри класса только объявляют, но определяют вне самого класса (не, ну как бы в классе, но вне) пример ниже

C++
1
2
3
4
5
class C {
int func(int n);// о,]объявляем
}
// дальше "выходим" из класса и определяем
int C::func(int n){return n+1;}
почему не определить сразу в классе?

C++
1
2
3
class C {
int func(int n){return n+1;};
}
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
07.01.2016, 14:01
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Раздельная компиляция (нюансы использования заголовочных файлов и файлов реализации) (C++):

Подключение заголовочных файлов и файлов реализации - C++
Здравствуйте,при создании класса в visual studio руками не компилится проект,при создании через add class все работает,для примера написал...

Раздельная компиляция файлов - C++
Если класс определен в раздельных файлах и изменения сделаны в части main программы, кот использует класс - какой файл необходимо...

Раздельная компиляция файлов в проекте. Межмодульное взаимодействие - C++
Задан проект-модель почтового сервера Созданы файлы: интерфейс сервера: server.h, интерфейс клиента-client.h, реализации...

не разберусь как переработать программу с учетом использования заголовочных файлов, модулей и пользовательских функций - C++
#include <iostream.h> #include <stdio.h> #include <conio.h> #include <stdlib.h> #include <string.h> FILE *fl; ...

Про добавление заголовочных файлов в заголовочных файлах - C++
В который раз эта вещь засовывает мозги в блендер! Я про то, что не могу однозначно запомнить (основываясь на моих знаниях о директиве...

Раздельная компиляция: что помещать в заголовочные файлы, а что в файлы реализации (исходники)? - C++
Здравствуйте, я учусь пользоваться Visual Studio.Пишу программу, в которой создаются и разрушаются объекты, определенного пользователем...

21
0x10
2479 / 1652 / 248
Регистрация: 24.11.2012
Сообщений: 4,093
07.01.2016, 18:06 #16
Цитата Сообщение от SergioO Посмотреть сообщение
вот который раз убеждаюсь что наглядно должны такие вопросы разбираться
Цитата Сообщение от SergioO Посмотреть сообщение
сам бы уже такую фигню сделал, но я подобными пакетами не владею. не хотите заняться?
Задумайтесь на минуту: может ли быть такое, что Вы — единственный в мире, кто задается этими вопросами? Скорее всего, нет. Кажется ли этот материал достаточно общим и базовым, чтобы его основы нужно было объяснять людям? Скорее всего, да. Следовательно, материалы должны быть. Вы их искали? Книги, статьи в гугле, видео на ютубе? Один запрос «Compilation process» выдает кучу результатов, на любой вкус. Понятно, что отвечать за качество подачи материала каждого никто не станет, тем не менее источников информации предостаточно.

Одна из первых попавшихся статей с диаграммами и листингами: link.
3
Nosey
1349 / 400 / 107
Регистрация: 22.10.2014
Сообщений: 863
Завершенные тесты: 2
07.01.2016, 18:09 #17
Цитата Сообщение от hoggy Посмотреть сообщение
все методы определённые в декларации класса неявно помечаются inline
На которую ему с высокой колокольни, если мы не включим оптимизацию.
А если включим оптимизацию, то он заинлайнит всё что сможет, помечена она или нет.

Если не учитывать верхнее, то потом возникнет вопрос "Что происходит при использовании ключевого слова inline?"
0
SergioO
95 / 184 / 63
Регистрация: 13.12.2015
Сообщений: 1,000
07.01.2016, 18:13  [ТС] #18
Скачал книгу А.Ахо "Компиляторы. Принципы, технологии и инструментарий". буду пробовать ))

Добавлено через 1 минуту
Цитата Сообщение от Nosey Посмотреть сообщение
Если не учитывать верхнее, то потом возникнет вопрос "Что происходит при использовании ключевого слова inline?"
вроде как и ничего даже ) а если функция коротенькая, то может и чего
0
hoggy
6693 / 2875 / 494
Регистрация: 15.11.2014
Сообщений: 6,467
Завершенные тесты: 1
07.01.2016, 18:27 #19
Цитата Сообщение от Nosey Посмотреть сообщение
На которую ему с высокой колокольни, если мы не включим оптимизацию.
А если включим оптимизацию, то он заинлайнит всё что сможет, помечена она или нет.
монопенисуальный фактор.

выше вы писали, что мы ни о чем не просим компилятор,
а лишь предоставляем ему какие то возможности.

ну так вот, мы именно, что просим заинлайнить.
мы сообщаем компилятору:
крутись, как хочешь, но эту функцию мы полагаем встраиваемой.

и мы имеем полное право так полагать.
стандарт нам это гарантирует.

простейший пример:
мы поклали болт на ODR, но ошибок множественного определения не происходит.
потому что стандарт гарантирует иммунитет для inline функций.

при этом нам абсолютно фиолетово,
дебаг у нас сейчас, или оптимизации.
и вообще, сможет ли компилятор реально оптимизировать,
или нет.

inline - ключевое слово языка.
синтаксис - первичен.
любые оптимизации - вторичны.
1
Kirik516
07.01.2016, 18:40
  #20

Не по теме:

Цитата Сообщение от SergioO Посмотреть сообщение
C++
1
#pragma once
разве не с этой целью или я чего-то путаю?
Это все ваши MSVS упоротости. А я под MinGW сижу.

Цитата Сообщение от Nosey Посмотреть сообщение
Это называется header guards.
Название то красивое. Но его могли не понять.

0
hoggy
6693 / 2875 / 494
Регистрация: 15.11.2014
Сообщений: 6,467
Завершенные тесты: 1
07.01.2016, 18:56 #21
Цитата Сообщение от SergioO Посмотреть сообщение
разве не с этой целью или я чего-то путаю?
нет, не путаете.
правда она "стандарт де факто".
то бишь, все топовые компиляторы её понимают,
масса народу использует,
однако оффициально стандарт её так и не узаконил.

Цитата Сообщение от Kirik516 Посмотреть сообщение
Это все ваши MSVS упоротости. А я под MinGW сижу.
стало быть, и mingw тоже упоротый, коли он тоже прагму-ванс умеет.
0
Kirik516
07.01.2016, 20:19     Раздельная компиляция (нюансы использования заголовочных файлов и файлов реализации)
  #22

Не по теме:

Цитата Сообщение от hoggy Посмотреть сообщение
стало быть, и mingw тоже упоротый, коли он тоже прагму-ванс умеет.
Скорее всего.

0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
07.01.2016, 20:19
Привет! Вот еще темы с ответами:

Подключение заголовочных файлов - C++
Здравствуйте. Возникают ошибки при компиляции проекта: 1. Указывает на указатель: 2. Указывает на указатель и коллекцию указателей: ...

Иерархия заголовочных файлов - C++
Вопрос такой. Есть 2 заголовочных файла с классами: core.h interface.h В core.h происходит #include interface.h В...

Назначение заголовочных файлов - C++
Я читала учебник и википедию - никак не доходит. В общем, может я неправильно поняла: есть у меня "Моя программа.cpp", и есть...

Объявление заголовочных файлов - C++
Скажите в чем разница между объявлением вида: #include <iostream> и вида #include "iostream"


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

Или воспользуйтесь поиском по форуму:
22
07.01.2016, 20:19
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru