powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / C++ [игнор отключен] [закрыт для гостей] / Зачем в С++ заголовочные файлы?
25 сообщений из 38, страница 1 из 2
Зачем в С++ заголовочные файлы?
    #32489300
M234
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Здрасте всем, т.к. я здесь ещё не постился.

Если я пишу класс в С++, то описания находятся в заголовочном файле а сами ф-ии класса в файле *.cpp

Зачем и почему и можно ли это в С++ делать иначе?
Ниже 2 примера, первый на С++, второй на C#:

Код: plaintext
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.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
//Class1.h   Заголовочный файл с описаниями полей и ф-ий класса
class Class1
{
private:
	int Variable;

public:
	Class1();
	Class1(int Start);
	int getVariable();
	void setVariable(int Variable);
};
// --------------------------------------
 

//Class1.cpp  --  Собстенно ф-ии класса  -------------------------
 

#include  "Class1.h" 

// -----------------------------------------------------------------
 
Class1::Class1()
{
	this->Variable =0 ;
}

Class1::Class1(int Start)
{
	this->Variable=Start;
}

int Class1::getVariable()
{
	return this->Variable;
}

void Class1::setVariable(int Variable)
{
	this->Variable=Variable;
}
//-------------------------------------


А вот так выглядит это на C#

Код: plaintext
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.
using System;


// Class1.cs  --- Всё в одном флаконе и бальзам так сказать и ополаскиватель :)
 
namespace Programm
{
	public class Class1
	{
		private int Variable;
	
		public Class1()
		{
			this.Variable =0 ;
		}
		
		public Class1(int Start)
		{
			this.Variable=Start;
		}

		public int getVariable()
		{
			return this.Variable;
		}
		
		public void getVariable(int Variable)
		{
			this.Variable=Variable;
		}
	}
}


Я сделал всё что мог, кто может пусть сделает лучше.
...
Рейтинг: 0 / 0
Зачем в С++ заголовочные файлы?
    #32489358
Кондраций
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Как зачем? Это способ хранения метаданных (т.е. данных, описывающих классы, модули...). Примерно для того-жу, что и библиотеки типов в VB или метаданные в .NET. Только разница между ними в 20 лет.
...
Рейтинг: 0 / 0
Зачем в С++ заголовочные файлы?
    #32489375
M234
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ОК. Но я же привёл пример на шарпе, никаких метаданных я лично там не писал. Где они? Где я их могу увидеть?

Я сделал всё что мог, кто может пусть сделает лучше.
...
Рейтинг: 0 / 0
Зачем в С++ заголовочные файлы?
    #32489534
funikovyuri
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
system.reflection
...
Рейтинг: 0 / 0
Зачем в С++ заголовочные файлы?
    #32489572
M234
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
system.reflection

Ну и пусть себе там лежат, главное, что я их сам в данном случае писать не должен :)

Я просто думал, может за этими заголовочными файлами смысл какой глубокий лежит, может преимущества у такого подхода есть какие-нить...

А что выходит? Куча ненужной работы....


Я сделал всё что мог, кто может пусть сделает лучше.
...
Рейтинг: 0 / 0
Зачем в С++ заголовочные файлы?
    #32489609
funikovyuri
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
M234

В .Net метаданные о типах храняться вместе с кодом в сборке reflection позволяет получить к ним доступ
...
Рейтинг: 0 / 0
Зачем в С++ заголовочные файлы?
    #32489634
M234
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
reflection позволяет получить к ним доступ

ОК. Мой примерчик выше видели? Вот к нему пожалста пример исп-ия reflection
напишите.

У меня не получается чего-то....
Пишу system.reflection выпадает ааааафигенный список всякой всячины и что дальше? Как мне метаданные моего класса получить?

Я сделал всё что мог, кто может пусть сделает лучше.
...
Рейтинг: 0 / 0
Зачем в С++ заголовочные файлы?
    #32489704
Станислав C.
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
1. Смысл в выделении заголовочных файлов, по-моему, в отделении описания от реализации. Например, захотел ты ввести новую переменную - тебе не надо искать куда бы ее воткнуть в уже готовой программе на С#...
2. Пример приведен не совсем корректный. На одном классе С# выглядит красиво. А во что превратится программа на С# при описании 5 - 10 классов?
3. Кроме того, если не заметили, функции от разных классов в срр-файле идут в произвольном порядке, а в C# положены внутрь скобок. В С++ новая функция добавляется в любое место файла (в начало, в середину или конец - как удобно разработчику), а попробуйте-ка добавить при тех же условиях новую функцию к классу в С# и сразу все станет ясно...
...
Рейтинг: 0 / 0
Зачем в С++ заголовочные файлы?
    #32489793
M234
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А во что превратится программа на С# при описании 5 - 10 классов?

Получите 5 - 10 .cs-файлов по одному на класс и ничего страшного не произойдёт...

Кроме того, если не заметили, функции от разных классов в срр-файле идут в произвольном порядке, а в C# положены внутрь скобок.

Не понял, какие скобки?

В С++ новая функция добавляется в любое место файла (в начало, в середину или конец - как удобно разработчику), а попробуйте-ка добавить при тех же условиях новую функцию к классу в С# и сразу все станет ясно...

Если мои классы находятся в одном пространстве имён, то никакой порядок мне не нужно соблюдать... опять же не понятно о чём это вы....
конкретнее пожалуйста.....

а классу ф-ию добавить могу влюбом месте, почему нет? что у меня по вашему мнению не должно получится? примерчик того что не получится можно?

Я сделал всё что мог, кто может пусть сделает лучше.
...
Рейтинг: 0 / 0
Зачем в С++ заголовочные файлы?
    #32490138
Станислав C.
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
>Не понял, какие скобки?
Операторные, т.е. { и }

>Если мои классы находятся в одном пространстве имён, то никакой порядок мне не нужно соблюдать... а классу ф-ию добавить могу влюбом месте, почему нет?

попробуйте написать в C# что-то подобное (именно в таком порядке):
класс1::функция1 {текст функции}
класс2::функция1 {текст функции}
класс3::функция2 {текст функции}
класс1::функция3 {текст функции}
класс4::функция1 {текст функции}
класс2::функция1 {текст функции} // перегрузка функции
класс4::функция1 {текст функции} // перегрузка функции
и т.д.

В дополнение к сказанному могу отметить, что часто реализация классов включается в С++ библиотеки, а описания дают возможность программисту понять (или вспомнить) как реализованы классы, какие функции, с какими аргументами должны вызываться...
...
Рейтинг: 0 / 0
Зачем в С++ заголовочные файлы?
    #32490148
Bigheadman
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Попробуй в одном cs-файле написать 2 класса (Class1 и Class2) в каждом по два метода (Method1 и Method2). Но при одном условии!
Реализация методов в данном классе должна идти в следующем порядке:
1) Class1.Method1
2) Class2.Method1
3) CLass1.Method2
4) CLass2.Method2

Потом посмотри, что тебе компилятор скажет.

P.S. 1 класс = 1 cs-файл. Это не данность, это всего лишь рекомендация MS по оформлению кода. В один файл можно запихнуть сколько угодно классов.
...
Рейтинг: 0 / 0
Зачем в С++ заголовочные файлы?
    #32490220
M234
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
В дополнение к сказанному могу отметить, что часто реализация классов включается в С++ библиотеки, а описания дают возможность программисту понять (или вспомнить) как реализованы классы, какие функции, с какими аргументами должны вызываться...

В ВизуалСтудио после того как я написал имя ф-ии и отрыл скобку, что бы параметры указать, я вижу сразу подсказку в которой есть всё что надо и описание ф-ии и каждого параметра....

Потом посмотри, что тебе компилятор скажет.

Компилятор совершенно резонно замечает, что этот класс уже был определён, т.е. писать новую ф-ию нужно внутри скобок Class1 { функции }.
Я же могу только усомнится в полезности "размазывания" класса в произвольном порядке в файле где к тому же уже "размазаны" так несколько других классов. Целостность картины пропадает, а каких-то преимуществ не видно.


Я сделал всё что мог, кто может пусть сделает лучше.
...
Рейтинг: 0 / 0
Зачем в С++ заголовочные файлы?
    #32490224
funikovyuri
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Копай глубже - возьми какую-нибудь книгу по обычному C и прочти - зачем там нужны .c и .h файлы - а рассказывать с нуля - долгое и неинтересное занятие...
...
Рейтинг: 0 / 0
Зачем в С++ заголовочные файлы?
    #32490262
Фотография www.fun4me.narod.ru
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
В файле .h описывается интефейс. В файле .cpp его реализация. Это позволяет разрабатывать интерфейсы и их реализации отдельно. Несомненно, что понять, какие методы класса нужны, проще, если не думать об их реализации. С другой же стороны, если известно, что именно должна делать функция, то разработать её реализацию проще. В итоге, сам процесс разработки существенно упрощается за счёт декомпозиции одной сложной задачи на две простых - разработки собственно интерфейса и собственно реализации.

Кроме того, при компиляции модулей в объектные файлы можно использовать ещё не реализованные интерфейсы - проверка на завершённость программы будет осуществляться только на этапе связывания.
...
Рейтинг: 0 / 0
Зачем в С++ заголовочные файлы?
    #32490270
M234
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Копай глубже - возьми какую-нибудь книгу по обычному C и прочти - зачем там нужны .c и .h файлы - а рассказывать с нуля - долгое и неинтересное занятие...

Зачем? Чтобы узнать, что в тысячадевятсотмохнатом году, "когда компьтеры были большими" было что-то, что требовало наличее этих файлов....

Если бы это несло в себе какое-то рациональное зерно, то такие файлы были бы везде и в паскале и в бэйсике и в шарпе...., но нет зерна, просто рудимент из далёкого прошлого....

Я сделал всё что мог, кто может пусть сделает лучше.
...
Рейтинг: 0 / 0
Зачем в С++ заголовочные файлы?
    #32490386
Фотография www.fun4me.narod.ru
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вы чего, M234, с Луны свалились? Как это зерна нет? А в Паскале точно так же есть интерфейс модуля и есть его реализация. Они разбиты на две независимые части. И в PL/SQL. А если этого и нет в C# - то это сделано только для того, чтобы сделать C# более совместимым с явой. Тут уж, извините, не об удобстве разработки думали. А вот потому, что в яве, C# и прочих языках нет заголовочных файлов - без UML в них кто угодно ногу сломит.
То есть, С++ - более-менее самодостаточный язык. А вот для C# требейтся UML или ещё что-нибудь в этом роде.
...
Рейтинг: 0 / 0
Зачем в С++ заголовочные файлы?
    #32490420
funikovyuri
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
В большинстве современных языков программирования в том либо ином виде существует понятие "модуль" - оно в частности обычно состоит из 2х частей - интерфейсной и содержащей непосредственно код в Pascal - это interface и implementation части одного pas. файла, в C/C++ это пара файлов с расширениями .h(interface) и .cpp(implementation). В C#, вслед за Java с их идеологией write once run anywhere, эти части соединены - таким образом создатели пытались сосредоточить все, что нужно в одном месте.

P.S> на мой взгляд - самая удобная реализация модуля в Pascal - т.е. один файл, но состоящий из двух частей.

P.P.S>я не стал вдаваться в тему - зачем вообще нужна interface-ная часть - по прежнему отсылаю к соответствующей литературе.
...
Рейтинг: 0 / 0
Зачем в С++ заголовочные файлы?
    #32490426
M234
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Интерфейсы и в шарпе конечно есть, только не в таком принудительном порядке и явлют собой очень гибкие штуки, которые можно применять, а можно и без них обойтись:

Код: plaintext
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.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
66.
67.
68.
69.
70.
using System;
interface IPoint 
{
   // Property signatures:
   int x 
   {
      get; 
      set; 
   }

   int y 
   {
      get; 
      set; 
   }
}

class MyPoint : IPoint 
{
   // Fields:
   private int myX;
   private int myY;

   // Constructor:
   public MyPoint(int x, int y) 
   {
      myX = x;
      myY = y;
   }

   // Property implementation:
   public int x 
   {
      get 
      {
         return myX;
      }

      set 
      {
         myX = value; 
      }
   }

   public int y 
   {
      get 
      {
         return myY; 
      }
      set 
      {
         myY = value; 
      }
   }
}

class MainClass 
{
   private static void PrintPoint(IPoint p) 
   {
      Console.WriteLine( "x={0 }, y= {1 }", p.x, p.y);
   }

   public static void Main() 
   {
      MyPoint p = new MyPoint (2  ,3 );
      Console.Write( "My Point: " );
      PrintPoint(p);
   }
}


Для любознательных:

http://msk.nestor.minsk.by/kg/2004/09/kg40903.html

Я сделал всё что мог, кто может пусть сделает лучше.
...
Рейтинг: 0 / 0
Зачем в С++ заголовочные файлы?
    #32490427
funikovyuri
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
M234

К стати - называть C++ рудиментом - по крайней мере не серьезно (тем более сравнивая его с бейсиком)
...
Рейтинг: 0 / 0
Зачем в С++ заголовочные файлы?
    #32490441
funikovyuri
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
M234

Интерфейсы и в шарпе конечно есть

Элементарная каша из понятий -
интерфейс модуля - это та его часть, которая видна другим модулям ИС
интерфейс в смысле класс без атрибутов (то что называется interface в C# и JAVA) - это соглашение о полиморфизме

Т.е. общего в этих понятих только синтаксис...
...
Рейтинг: 0 / 0
Зачем в С++ заголовочные файлы?
    #32490447
M234
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
К стати - называть C++ рудиментом - по крайней мере не серьезно (тем более сравнивая его с бейсиком)

С++ рудиментом я не называл, но некоторые вещи и в нём любимом не очень хорошо продуманы.
Взять к примеру строки. Паскалевы строки получше организованы...

Я сделал всё что мог, кто может пусть сделает лучше.
...
Рейтинг: 0 / 0
Зачем в С++ заголовочные файлы?
    #32490453
funikovyuri
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
M234

Бросьте - это String в Pascal лучше оганизован чем std::string?
...
Рейтинг: 0 / 0
Зачем в С++ заголовочные файлы?
    #32490913
Антон Петров
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Заголовочные файлы остались от той поры, когда люди одевались в шкуры, дрались дубинами, а единственной документацией к программам служили исходники. :)
...
Рейтинг: 0 / 0
Зачем в С++ заголовочные файлы?
    #32490923
Lepsik
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
а ты напиши так и будет короче чем в шарпе и быстрее в разы

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
//Class1.h   Заголовочный файл с описаниями полей и ф-ий класса
template <class T> class Class1
{
private:
	T Variable;

public:
	inline Class1(){Variable =0 ;}
	inline Class1(int Start){Variable=Start;}
	inline T getVariable(){return Variable;}
	void setVariable(T _Variable){Variable=_Variable};
};



и что бы могло так работать :


Class1 <int> A;
Class1 <float> B;
A.setVariable( 5.2 );
B.setVariable( A.getVariable() );

и зачем этот убогий C# никак не пойму
...
Рейтинг: 0 / 0
Зачем в С++ заголовочные файлы?
    #32490929
M234
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
funikovyuri

Из одной статьи...

"....Одно из преимуществ паскалевских строк состоит в том, что не надо каждый раз пробегать по строке в поисках её конца. Длина строки определяется одной ассемблерной инструкцией вместо целого цикла. Это намного быстрее.

Старая операционная система Макинтошей использовала паскалевские строки повсюду. Многие программисты на C на других платформах использовали паскалевские строки для ускорения работы. Excel использует паскалевские строки внутри себя, поэтому строки во многих местах в Excel не могут быть длиннее 255 байт, и это одна из причин, почему Excel так быстро работает."



Я сделал всё что мог, кто может пусть сделает лучше.
...
Рейтинг: 0 / 0
25 сообщений из 38, страница 1 из 2
Форумы / C++ [игнор отключен] [закрыт для гостей] / Зачем в С++ заголовочные файлы?
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]