Модераторы: Daevaorn

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> немного о хеадерах 
V
    Опции темы
archimed7592
Дата 22.9.2007, 08:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Архимед
****


Профиль
Группа: Завсегдатай
Сообщений: 2531
Регистрация: 12.6.2004
Где: Moscow

Репутация: 58
Всего: 93



Цитата(apook @  22.9.2007,  02:43 Найти цитируемый пост)
Заполнять при обьявлении имелось ввиду напр:

И чем твой пример отличается от int x = 75;? 0_o

Вообще говоря, тебе не плохо было бы узнать разницу между объявлением и определением. "Заполнять"(а точнее, инициализировать) при объявлении нельзя - так устроен язык С++.


Цитата(apook @  22.9.2007,  02:43 Найти цитируемый пост)
проделать сие в хеадере как я теперь понял нельзя....

В хэдере можно делать абсолютно всё, что можно делать в самом модуле(.cpp), но нужно осозновать возможные последствия содеянного.


Попробуй задаться для себя вопросом: в чём для тебя принципиальная разница "заполнения" в хэдере или модуле? Думаю, когда ответишь на него, все вопросы сразу отпадут.


--------------------
If you have an apple and I have an apple and we exchange apples then you and I will still each have one apple. But if you have an idea and I have an idea and we exchange these ideas, then each of us will have two ideas.
© George Bernard Shaw
PM Jabber   Вверх
apook
Дата 22.9.2007, 09:54 (ссылка)    | (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 794
Регистрация: 12.7.2006

Репутация: 9
Всего: 23



Цитата(archimed7592 @  22.9.2007,  08:06 Найти цитируемый пост)
Попробуй задаться для себя вопросом: в чём для тебя принципиальная разница "заполнения" в хэдере или модуле?
 Сложный вопрос. Думаю ответ:-"Так захотелось", почти подходит. Ну вобщем вопрос снят с повески дня! smile 



--------------------
Мои руки из дуба, голова из свинца ну и пусть ...
PM MAIL   Вверх
archimed7592
Дата 22.9.2007, 11:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Архимед
****


Профиль
Группа: Завсегдатай
Сообщений: 2531
Регистрация: 12.6.2004
Где: Moscow

Репутация: 58
Всего: 93



Цитата(apook @  22.9.2007,  09:54 Найти цитируемый пост)
Думаю ответ:-"Так захотелось"

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


--------------------
If you have an apple and I have an apple and we exchange apples then you and I will still each have one apple. But if you have an idea and I have an idea and we exchange these ideas, then each of us will have two ideas.
© George Bernard Shaw
PM Jabber   Вверх
apook
Дата 22.9.2007, 14:07 (ссылка)    | (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 794
Регистрация: 12.7.2006

Репутация: 9
Всего: 23



так, если уж разбитраться что подтолкнуло обьявить переменную в хеадере, то скажу что этому предшествовало, предупреждаю что все не очень серьезно. а дело было так, напоминаю что переменная является структурой и вполне вероятно, так как я не совсем ясно представляю всех нюансов достижения будущей программой поставленного результата, эта структура станет массивом структур.. Структура являлась членом некого класса, дойдя до написания конструктора которого я встал перед вопросом заполнения полей структуры( а заполняется она заранее известными данными) , их примерно 10 - 15(полей) т.е не много(чтоб начать плодить хеадеры с коими итак путанница) но и не мало чтоб это незаметно выглядело в конструкторе(строки типа 
Код
strcpy( p->DAT[ 0 ]. ident, "submamber_item_value" );
) и таких 15 x n. Ну просто представилось предпочтительнее заполнить структуру статически и не вспоминать о ее инициализации более ни где на протяжении всего кода.
Кстати уже инициализировал в конструкторе(временно), но однак так и останется.... 

Сейчас пришло на ум поиграться со значеничми по умолчанию и инициализировать типа статически, но опять же не все компиляторы поддерживают такую фишку в default constructor, есть-ли какие-нибудь соображения?? чты эт не очень серьезно так ка прога и так работть будет

Это сообщение отредактировал(а) apook - 22.9.2007, 14:21


--------------------
Мои руки из дуба, голова из свинца ну и пусть ...
PM MAIL   Вверх
Ln78
Дата 22.9.2007, 16:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 274
Регистрация: 25.11.2006

Репутация: 13
Всего: 15



apook, при очень большом желании можно и зайца курить научить (вопрос зачем?). В твоём случае, один из вариантов может быть такой:
Код

#ifdef _DATA
#define _MOD
#define SET =
#define BRACE_L {
#define BRACE_R }
#define COMMA ,
#define INIT1(a) {(a)}
#define INIT2(a,b) {(a),(b)}
#define INIT3(a,b,c) {(a),(b),(c)}
#else
#define _MOD extern
#define INIT1(a) 
#define INIT2(a,b)
#define INIT3(a,b,c)
#define SET
#define BRACE_L 
#define BRACE_R 
#define COMMA 
#endif

_MOD struct S_DAT

    char S[ 3 ][ 2 ]; //идентификаторы
    int I;
} DAT SET BRACE_L 
      INIT3(("\x30"),("\x31"),("\x33")) COMMA 
      INIT1(25) 
  BRACE_R ;


В одном из *.cpp файлов нужно определить _DATA.
PM MAIL   Вверх
zkv
Дата 22.9.2007, 16:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата



****


Профиль
Группа: Участник Клуба
Сообщений: 2133
Регистрация: 23.7.2006
Где: Санкт-Петербург

Репутация: 26
Всего: 92



если инициализацией простой не обойтись, то можно сделать следущее:
(надеюсь правильно тебя понял)
Код

struct DATA
{
  const char *someField;
};

class CSome
{
  static DATA m_data;
  static bool  m_fDataIsConstructed;
public:
  CSome();
  static void ConstructData();
};

bool CSome::m_fDataIsConstructed = false;

CSome::CSome()
{
  if( !CSome::m_fDataIsConstructed )
    ConstructData();
}

void CSome::ConstructData()
{
  // initialize m_data here 
}

PM MAIL   Вверх
apook
Дата 22.9.2007, 16:41 (ссылка)    | (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 794
Регистрация: 12.7.2006

Репутация: 9
Всего: 23



Одной из причин было уменьшение строчек кода, хотяб иллюзия этого smile 
Спасибо за предложеннные  варианты.


--------------------
Мои руки из дуба, голова из свинца ну и пусть ...
PM MAIL   Вверх
zkv
Дата 22.9.2007, 16:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата



****


Профиль
Группа: Участник Клуба
Сообщений: 2133
Регистрация: 23.7.2006
Где: Санкт-Петербург

Репутация: 26
Всего: 92



Цитата(apook @  22.9.2007,  16:41 Найти цитируемый пост)
Одной из причин было уменьшение строчек кода

целью должна быть скорее прозрачность кода, а не количество строчек.  smile 
PM MAIL   Вверх
apook
Дата 28.9.2007, 13:24 (ссылка)    | (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 794
Регистрация: 12.7.2006

Репутация: 9
Всего: 23



как борться с тем что при включении хеадера значительно утяжеляется исполняемый файл, даже если (ради эксперемента) не вызывать ничего из этого файла ?


--------------------
Мои руки из дуба, голова из свинца ну и пусть ...
PM MAIL   Вверх
akizelokro
Дата 28.9.2007, 13:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Крокодил
**


Профиль
Группа: Участник
Сообщений: 761
Регистрация: 30.7.2007

Репутация: 1
Всего: 5



ради эксперимента попробовать не включать такой хедер smile 

Это сообщение отредактировал(а) akizelokro - 28.9.2007, 13:28


--------------------
a = a + b; b = a - b; a = a - b;
PM MAIL   Вверх
apook
Дата 28.9.2007, 14:07 (ссылка)    | (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 794
Регистрация: 12.7.2006

Репутация: 9
Всего: 23



Мне почему-то хочется включить iostream.h

Хотя включив просто iostream.h файл не увеличивается, а если вызвать cout  то увеличивается с  4.67 kb  до 28.9 kb!!! smile
а файл string хватает просто включить и файл увеличивается до 70 kb smile smile smile ! И вобщем тогда тоже склоняюсь не включать таких файлов(как жаль)... 

Это сообщение отредактировал(а) apook - 28.9.2007, 14:29


--------------------
Мои руки из дуба, голова из свинца ну и пусть ...
PM MAIL   Вверх
archimed7592
Дата 28.9.2007, 14:33 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Архимед
****


Профиль
Группа: Завсегдатай
Сообщений: 2531
Регистрация: 12.6.2004
Где: Moscow

Репутация: 58
Всего: 93



Цитата(apook @  28.9.2007,  14:07 Найти цитируемый пост)
Мне почему-то хочется включить iostream.h 

Странные нынче программисты пошли...
no comments



--------------------
If you have an apple and I have an apple and we exchange apples then you and I will still each have one apple. But if you have an idea and I have an idea and we exchange these ideas, then each of us will have two ideas.
© George Bernard Shaw
PM Jabber   Вверх
apook
Дата 1.10.2007, 07:02 (ссылка)    | (голосов:3) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 794
Регистрация: 12.7.2006

Репутация: 9
Всего: 23



товарищ Уолтер Савич говорит что в cpp файле для хеадера следует писать
Код

//file somefile.cpp
#ifdef SOMEFILE_CPP
#define SOMEFILE_CPP

...

#endif

говорится так-же что при таком включении не надо передавать имя такого файла в параметре компилятора, а так же не надо включать его через include напр:  #include"somefile.cpp"
на практике это не работает. Работает так:
Код

//file somefile.cpp
#include"somefile.h"

и имя файла передается с пареметром компилятору
что-за ?


Это сообщение отредактировал(а) apook - 1.10.2007, 07:04


--------------------
Мои руки из дуба, голова из свинца ну и пусть ...
PM MAIL   Вверх
archimed7592
Дата 1.10.2007, 07:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Архимед
****


Профиль
Группа: Завсегдатай
Сообщений: 2531
Регистрация: 12.6.2004
Где: Moscow

Репутация: 58
Всего: 93



apook, ты сам то понял, что написал?


--------------------
If you have an apple and I have an apple and we exchange apples then you and I will still each have one apple. But if you have an idea and I have an idea and we exchange these ideas, then each of us will have two ideas.
© George Bernard Shaw
PM Jabber   Вверх
apook
Дата 1.10.2007, 08:24 (ссылка)    | (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 794
Регистрация: 12.7.2006

Репутация: 9
Всего: 23



Цитата(archimed7592 @  1.10.2007,  07:15 Найти цитируемый пост)
apook, ты сам то понял, что написал?
Да, ну если захотеть не понять то можно и не понять. Извиняюсь я не на экзамене и даже не на уроке чтоб  формулировать суперточно. Тебя смутила фраза
Цитата
в cpp файле для хеадера
, ну ты -же понял о чем я... че придераешься?



--------------------
Мои руки из дуба, голова из свинца ну и пусть ...
PM MAIL   Вверх
Страницы: (4) Все 1 [2] 3 4 
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С++:Общие вопросы"
Earnest Daevaorn

Добро пожаловать!

  • Черновик стандарта C++ (за октябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика(4.4мб).
  • Черновик стандарта C (за сентябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика (3.4мб).
  • Прежде чем задать вопрос, прочтите это и/или это!
  • Здесь хранится весь мировой запас ссылок на документы, связанные с C++ :)
  • Не брезгуйте пользоваться тегами [code=cpp][/code].
  • Пожалуйста, не просите написать за вас программы в этом разделе - для этого существует "Центр Помощи".
  • C++ FAQ

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Earnest Daevaorn

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0824 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.