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

Назначение заголовочных файлов - C++

Восстановить пароль Регистрация
Другие темы раздела
C++ Что почитать? Посоветуйте http://www.cyberforum.ru/cpp-beginners/thread923578.html
Всем привет. Весь второй семестр учили в университете с++, и учась в универе я понял насколько огромные возможности предоставляет данный ЯП. Мы прошли структурное программирование и изучили базовые принципы ООП (инкапсуляцию, наследование, полиморфизм). Посоветуйте пожалуйста книгу по которой я могу продолжить изучения языка. Шаблоны...стандартная библиотека....и что бы основ по минимуму.
C++ Полиморфизм В одной дешевой книжке про него пишут а в другой дорогой нет и понять я почему то немогу точно как и для чего он нужен http://www.cyberforum.ru/cpp-beginners/thread923565.html
C++ Подскажите, что я делаю не так
Вот задача: Написать программу, по длинам сторон распознающую среди всех треугольников АВС прямоугольные. Если таковых нету, то вычислить величину большего угла. Вот мой код. Подскажите, что я не так делаю. #include<iostream.h> #include<windows.h> #include<math.h> int main() { SetConsoleOutputCP(1251);
C++ Класс без конструктора. Ошибка 1 неразрешенных внешних элементов
Добрый вечер. Помогите исправить ошибку. Пример у Страуструпа не работает. При компиляции появляется ошибка 1 неразрешенных внешних элементов class CZlib { public: // конструктор отсутствует static void Initialize() { mInitialized=true; } static bool GetInitialized() { return mInitialized; }
C++ Не могу стартануть с WinApi http://www.cyberforum.ru/cpp-beginners/thread923523.html
Решил после изучения С++ освоить WinApi, он всетаки и к С# применим и ко всему угодно на сколько я понял. Но никак не могу понять как начать его изучать. Не могу найти код с окном, который можно бы было вписать в MSVS2010, откомпилить и дальше по учебнику разбирать и пробовать каждый параметр по порядку. В сети советуют читать Петзольда, но там примеры на чистом С. Вобщем посоветуйте учебник...
C++ Ошибка в программе Я сейчас читаю книгу Липпмана "Язык программирования С++", так вот, там в конце 1 главы есть упражнение.Цитирую: "Напишите программу, которая запрашивает имя пользователя.Считайте ответ.Проверьте, чтоб введенная пользователем строка была не меньше двух символов.Если имя прошло проверку, выдайте пользователю ответ." Там ещё есть два предложения, но это уже не важно. Важно то, то я написал вот... подробнее

Показать сообщение отдельно
ValeryS
Модератор
6376 / 4842 / 442
Регистрация: 14.02.2011
Сообщений: 16,045
17.07.2013, 08:34     Назначение заголовочных файлов
Цитата Сообщение от Керра Посмотреть сообщение
программе.
Если это так, то я не понимаю, какой смысл выделять это в отдельный файл, если можно прописать то же самое в самом начале. Просто чтобы был отдельный список, и не надо было скакать вверх-вниз, если надо вспомнить какие параметры нужно передать в функцию?
видишь ли оно так и происходит
#include дает команду препроцессору вставить в файл все что находится в другом файле
препроцессор это такая штука которая работает еще до компилятора

например есть файлы
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
// file1.h
 
int fnc_file1(void);// объявление ;
 
..........................
 
// file1.c
#include "file1.h"
int fnc_file1(void)  // определение
{
 return 2;
}
 
.........................................
// file2.c
#include "file1.h"
int  a=fnc_file1();//использование
они после препроцессора превратятся
в
C++
1
2
3
4
5
6
7
8
9
10
11
12
// file1.c
int fnc_file1(void); // объявление
int fnc_file1(void)  //определение
{
 return 2;
}
 
.........................................
// file2.c
 
int fnc_file1(void); // объявление
int  a=fnc_file1();// использование
можешь так же ручками написать, никто ругать не станет
а если нужно использовать 100 функций ??? все 100 прописывать
вот и разбили на файлы, заголовков и реализации
следующий уровень использования
ктото уже скомпилировал file1 создал из него библиотеку, но как её использовать если не знаем что за функции в ней и как они выглядят?
вот и нужен заголовочный файл

простейший пример window.h где реализованы функции программист может и не знать а заголовочный файл вот он

теперь о #pragma once
говорит что два раза не надо включать заголовочный файл
например если напишем так
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
// file1.h
 
int fnc_file1(void); // объявление
 
..........................
 
// file1.c
#include "file1.h"
int fnc_file1(void)  // определение
{
 return 2;
}
 
.........................................
// file2.c
#include "file1.h"
#include "file1.h"
int  a=fnc_file1();//использование
после препроцессора превратится в

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
// file1.c
int fnc_file1(void);// 
int fnc_file1(void)
{
 return 2;
}
 
.........................................
// file2.c
 
int fnc_file1(void); // Два объявления!!!!
int fnc_file1(void);
int  a=fnc_file1();

конечно никто в здравом уме так писать не будет, но есть неявное подключение

например
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
// file1.h
 
int fnc_file1(void);// объявление ;
 
..........................
 
// file3.h
#include "file1.h"
 int fnc_file3(void);// объявление ;
 
..........................
 
// file1.c
#include "file1.h"
int fnc_file1(void)  // определение
{
 return 2;
}
 
// file3.c
#include "file3.h"
int fnc_file3(void)  // определение
{
 return 5;
}
.........................................
// file2.c
#include "file1.h"
#include "file3.h" 
int  a=fnc_file1();//использование
int  b=fnc_file3();
они после препроцессора превратятся в
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
// file1.c
int fnc_file1(void); // объявление
int fnc_file1(void)  //определение
{
 return 2;
}
 
// file3.c
int fnc_file1(void); // объявление придет из  file3.h   #include "file1.h"
int fnc_file3(void) ;
int fnc_file3(void)  // определение
{
 return 2;
}
 
 
.........................................
// file2.c
 
int fnc_file1(void);
int fnc_file1(void); // объявление придет из  file3.h   #include "file1.h"
int fnc_file3(void) ;
int  a=fnc_file1();// использование


для таких случаев и служит #pragma once
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
// file1.h
#pragma once 
int fnc_file1(void);// объявление ;
 
..........................
 
// file3.h
#include "file1.h"
 int fnc_file3(void);// объявление ;
 
..........................
 
// file1.c
#include "file1.h"
int fnc_file1(void)  // определение
{
 return 2;
}
 
// file3.c
#include "file3.h"
int fnc_file3(void)  // определение
{
 return 2;
}
.........................................
// file2.c
#include "file1.h"
#include "file3.h" 
int  a=fnc_file1();//использование
int  b=fnc_file3();
они после препроцессора превратятся в
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
// file1.c
int fnc_file1(void); // объявление
int fnc_file1(void)  //определение
{
 return 2;
}
 
// file3.c
int fnc_file1(void); // объявление придет из  file3.h   #include "file1.h"
int fnc_file3(void) ;
int fnc_file3(void)  // определение
{
 return 5;
}
 
 
.........................................
// file2.c
 
int fnc_file1(void);
//int fnc_file1(void); // объявление из  file3.h   #include "file1.h" не придет сработает #pragma once 
int fnc_file3(void) ;
int  a=fnc_file1();// использование
для этих же случаев служит Include guard
это конструкция типа
C++
1
2
3
4
 #ifndef MACRO1 //  если макрос определен то пропускаем все до #endif
 #define MACRO1 // иначе определим макрос 
 .........   // и чтото делаем
 #endif
вот пара ссылок
http://ru.wikipedia.org/wiki/Pragma_once
http://ru.wikipedia.org/wiki/Include_guard
несколько сумбурно получилось но надеюсь понятно
 
Текущее время: 20:53. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru