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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Исходные файлы с описанием класса, Как правильно 
:(
    Опции темы
KuMa1104
Дата 20.1.2011, 00:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Всем здрасте)))
 
Цитата(borisbn @  19.1.2011,  11:54 Найти цитируемый пост)
efpies, самая общепринятая практика следующая: в h-файлах класс описывается, а в cpp-файлах - определяется. Описание класса - есть интерфейс (договор, контракт) между тем, кто его создаёт и тем, кто его будет использовать. Определение класса - это уже не договор, а испольнение договора, причём только тем, кто его создаёт. При этом, если ты изменяешь договор между разработчиком класса и его потребителем, то тебе необходимо перекомпилировать и сам класс, и те исходники, которые его используют. Если же ты меняешь только ход исполнения договора, при этом контракт остаётся нетронутым, то достаточно только перекомпилировать исходник класса. А вообще без перекомпиляции при изменении в Си/Си++ никак. Это не скриптовый язык.
Вот пример нормальной организации класса и его использования:
SomeClass.h
код C++
#if !defined( _SOME_CLASS_H_INCLUDED_ )
#define _SOME_CLASS_H_INCLUDED_ 
class SomeClass {
public:
  SomeClass();
  ~SomeClass();
  void foo();
private:
  int m_x;
  void bar();
};
#endif //!defined( _SOME_CLASS_H_INCLUDED_ )


SomeClass.cpp
#include "SomeClass.h"
SomeClass::SomeClass()
  : m_x( 0 )
{
}
SomeClass::~SomeClass() {
}
void SomeClass::foo() {
}
void SomeClass::bar() {
}


А можно в .cpp файле добавить новые функции члены класса?
Код

void SomeClass::NewMetod() {

У меня компилятор визжит на такое, это вообще возможно?

Добавлено через 1 минуту и 40 секунд
private я имею в виду конечно.

Это сообщение отредактировал(а) KuMa1104 - 20.1.2011, 00:57


--------------------
Галактика – суровая штука. Чтобы в ней выжить, надо знать, где твое полотенце.

Время - штука относительная... а время обеда - ещё более относительная
PM MAIL   Вверх
borisbn
Дата 20.1.2011, 09:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 4875
Регистрация: 6.2.2010
Где: Ростов-на-Дону

Репутация: 21
Всего: 135



Цитата(KuMa1104 @  20.1.2011,  00:57 Найти цитируемый пост)
А можно в .cpp файле добавить новые функции члены класса?

Вот тебе и ответ.
Цитата(KuMa1104 @  20.1.2011,  00:57 Найти цитируемый пост)
У меня компилятор визжит на такое, это вообще возможно?

Нет. К сожалению.


--------------------
Женщины отличаются от программистов тем, что у них чары состоят из стрингов
PM MAIL Jabber   Вверх
KuMa1104
Дата 20.1.2011, 23:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Цитата(borisbn @  20.1.2011,  09:07 Найти цитируемый пост)
Вот тебе и ответ.
Цитата(KuMa1104 @  20.1.2011,  00:57 )
У меня компилятор визжит на такое, это вообще возможно?

Да пожалуй действительно железный довод)



--------------------
Галактика – суровая штука. Чтобы в ней выжить, надо знать, где твое полотенце.

Время - штука относительная... а время обеда - ещё более относительная
PM MAIL   Вверх
bsa
Дата 20.1.2011, 23:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Модератор
Сообщений: 9185
Регистрация: 6.4.2006
Где: Москва, Россия

Репутация: 85
Всего: 196



KuMa1104, а почему нельзя и в объявление класса добавить?
PM   Вверх
mes
Дата 20.1.2011, 23:51 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


любитель
****


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

Репутация: 79
Всего: 250



Цитата(borisbn @  19.1.2011,  10:54 Найти цитируемый пост)
  в h-файлах класс описывается, а в cpp-файлах - определяется. 

 smile,
Цитата

A class is considered a completely-defined object type (3.9) (or complete type) at the closing } of the
class-specifier.

т.е. определение (definition) класса "происходит" в хидере.. 
 smile 

Это сообщение отредактировал(а) mes - 20.1.2011, 23:53


--------------------
PM MAIL WWW   Вверх
borisbn
Дата 21.1.2011, 00:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 4875
Регистрация: 6.2.2010
Где: Ростов-на-Дону

Репутация: 21
Всего: 135



Цитата(mes @  20.1.2011,  23:51 Найти цитируемый пост)
определение (definition)

перевод definition:

определение
четкость
описание
дефиниция
толкование
резкость
точность
ясность

Т.о. вопрос только в переводе, а если прочитать полностью
Цитата(borisbn @  19.1.2011,  11:54 Найти цитируемый пост)
Описание класса - есть интерфейс (договор, контракт) между тем, кто его создаёт и тем, кто его будет использовать. Определение класса - это уже не договор, а испольнение договора

а не выдёргивать, то получается вполне стройно smile


--------------------
Женщины отличаются от программистов тем, что у них чары состоят из стрингов
PM MAIL Jabber   Вверх
mes
Дата 21.1.2011, 00:21 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


любитель
****


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

Репутация: 79
Всего: 250



Цитата(borisbn @  20.1.2011,  23:16 Найти цитируемый пост)
Т.о. вопрос только в переводе, а если прочитать полностью

нет, вопрос в устоявшихся терминах smile

Добавлено @ 00:24
Цитата(borisbn @  20.1.2011,  23:16 Найти цитируемый пост)
, а если прочитать полностью

Цитата(KuMa1104 @  19.1.2011,  23:57 Найти цитируемый пост)
 Описание класса - есть интерфейс 

Цитата(KuMa1104 @  19.1.2011,  23:57 Найти цитируемый пост)
. Определение класса - это уже не договор, а испольнение договора, 

 smile  smile 

Это сообщение отредактировал(а) mes - 21.1.2011, 00:25


--------------------
PM MAIL WWW   Вверх
borisbn
Дата 21.1.2011, 07:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 4875
Регистрация: 6.2.2010
Где: Ростов-на-Дону

Репутация: 21
Всего: 135



mes, ОК, сдаюсь. Не силён в терминологии smile
Скажи, пожалуйста, как в устоявшемся виде называют интерфейс класса, а как - реализацию его функций ?


--------------------
Женщины отличаются от программистов тем, что у них чары состоят из стрингов
PM MAIL Jabber   Вверх
mes
Дата 21.1.2011, 11:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


любитель
****


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

Репутация: 79
Всего: 250



class Class; // объявление класса

class Class { 
       void f();  // объявление (прототипа) функции-члена
}; // определение класса

void Class::f() {} // определение функции-члена




--------------------
PM MAIL WWW   Вверх
borisbn
Дата 21.1.2011, 15:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 4875
Регистрация: 6.2.2010
Где: Ростов-на-Дону

Репутация: 21
Всего: 135



mes, я прекрасно понимаю, что о терминологии (тем более о переводе) можно спорить долго и, практически всегда, безрезультатно, однако...

Цитата(mes @  21.1.2011,  11:57 Найти цитируемый пост)
class Class; // объявление класса

чесслово, всегда считал это предварительным объявлением (или предобъявлением) ...

а по поводу 
Цитата(mes @  21.1.2011,  11:57 Найти цитируемый пост)
}; // определение класса

вот тут
нашёл гениальную фразу
Цитата

Как сказано в Справочном руководстве по C++, "Если бы не исторические причины, объявление класса следовало называть определением класса".


так что предлагаю ничью smile


--------------------
Женщины отличаются от программистов тем, что у них чары состоят из стрингов
PM MAIL Jabber   Вверх
mes
Дата 21.1.2011, 18:31 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


любитель
****


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

Репутация: 79
Всего: 250



Цитата(borisbn @  21.1.2011,  14:15 Найти цитируемый пост)
я прекрасно понимаю, что о терминологии (тем более о переводе) можно спорить долго и, практически всегда, безрезультатно, однако...

в данном случае спор не о словax "определение" и "описание"..  а о том, что определение/описание класса не затрагивает определение функций-членов..


Цитата(borisbn @  21.1.2011,  14:15 Найти цитируемый пост)
всегда считал это предварительным объявлением (или предобъявлением) ...

будет ли это объявление предварительным, зависит от того, известно ли уже это имя или нет.. 
Код

class Class; // forward declaration
class Class {}; //  declaration by definition
class Class; // backward declaration


Цитата(borisbn @  21.1.2011,  14:15 Найти цитируемый пост)
вот тут
нашёл гениальную фразу

сейчас почитаю.. 



--------------------
PM MAIL WWW   Вверх
baldina
Дата 21.1.2011, 18:31 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 3433
Регистрация: 5.12.2007
Где: Москва

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



KaraKum, используешь "нарекание" с странном, не общеупотребительном значении. звучит забавно
http://ru.wiktionary.org/wiki/%D0%BD%D0%B0...%BD%D0%B8%D0%B5

Цитата(KaraKum @  18.1.2011,  16:32 Найти цитируемый пост)
все эти проблемы решаются как сами собой разумеющиеся после должного проектирования программы

о проектировании структуры кода, его организации и спрашивает ТС

Цитата(efpies @  19.1.2011,  21:30 Найти цитируемый пост)
 Или компилятор будет знать "по умолчанию" о существовании cpp-файла

efpies, в С/С++ используется т.н. раздельная компиляция, т.е. компилятор знает лишь о том файле, который компилирует в данный момент. содержимое включаемого файла в буквальном смысле подставляется в место директивы #include и компилируется результат.
таким образом заголовочные файлы являются средством связи между файлами .сpp, при помощи них объявляются типы и переменные, определенные в другом файле.
отдельный файл в C/C++ является не только единицей компиляции, но и средством структуризации программ (другие средства - функции, структуры и классы, пространства имен). К ним в общем случае применимы те же правила, что и к любым средствам структуризации: одна задача (тема, понятие) - один файл (класс, функция). интуитивно понять, как это лучше сделать, можно посмотрев на содержимое стандартных заголовков: cmath, ctime, vector, map, iostream, string.
Если речь идет о классах, то один заголовок - один класс (плюс, возможно, классы, связанные с ним и только с ним непосредственно. например string и string_iterator).
Конечно, в любом правиле бывают исключения, все должно быть по уму и без фанатизма.
Для упрощения анализа и отладки, для сокращения времени компиляции число связей в проекте, в т.ч. связей между файлами, стараются уменьшить.
пример borisbn вполне иллюстрирует основу такого подхода.

Добавлено через 12 минут и 30 секунд
mesborisbn, не спорьте. в русскоязычной терминологии на эту тему небольшой бардак.
объявление (declaration) - ввод идентификатора в текущую область видимости. при этом объявление может быть определением. а может и не быть, как, например, опережающее объявление.
PM MAIL   Вверх
mes
Дата 21.1.2011, 18:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


любитель
****


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

Репутация: 79
Всего: 250



Цитата(mes @  21.1.2011,  17:31 Найти цитируемый пост)
сейчас почитаю.. 

о нет, такое читать не буду..  smile

Цитата(borisbn @  21.1.2011,  14:15 Найти цитируемый пост)
так что предлагаю ничью  

ну ну, пожалуйста.. не буду Вас разубеждать.. продолжайте читать Марченко.. smile

Добавлено через 3 минуты и 12 секунд
Цитата(baldina @  21.1.2011,  17:31 Найти цитируемый пост)
 не спорьте. в русскоязычной терминологии на эту тему небольшой бардак.


Цитата(mes @  21.1.2011,  17:31 Найти цитируемый пост)
в данном случае спор не о словax "определение" и "описание"..  а о том, что определение/описание класса не затрагивает определение функций-членов..

 smile 

Цитата(baldina @  21.1.2011,  17:31 Найти цитируемый пост)
 при этом объявление

как раз конфликта между "объявление" и "определение" нету.. 
есть спор какое из слов "определение" или "описание" подходит в качестве перевода для "definition" в некоторых случаях... 



--------------------
PM MAIL WWW   Вверх
baldina
Дата 21.1.2011, 18:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 3433
Регистрация: 5.12.2007
Где: Москва

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



Цитата(mes @  21.1.2011,  18:44 Найти цитируемый пост)
Цитата(mes @  21.1.2011,  17:31 )
в данном случае спор не о словax "определение" и "описание"..  а о том, что определение/описание класса не затрагивает определение функций-членов..

с этим borisbn вроде бы и не спорил. а насчет перевода... definition можно перевести как описание. если рядом нет declaration.
PM MAIL   Вверх
mes
Дата 21.1.2011, 19:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


любитель
****


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

Репутация: 79
Всего: 250



Цитата(baldina @  21.1.2011,  17:50 Найти цитируемый пост)
с этим borisbn вроде бы и не спорил. 


Цитата(borisbn @  20.1.2011,  23:16 Найти цитируемый пост)

Т.о. вопрос только в переводе, а если прочитать полностью
Цитата(borisbn @  19.1.2011,  11:54 )
Описание класса - есть интерфейс (договор, контракт) между тем, кто его создаёт и тем, кто его будет использовать. Определение класса - это уже не договор, а испольнение договора

а не выдёргивать, то получается вполне стройно 

 smile

Добавлено @ 19:08
Цитата(baldina @  21.1.2011,  17:50 Найти цитируемый пост)
definition можно перевести как описание. 

да дело не в том как перевести это definition, a в том, к чему его применили smile


Это сообщение отредактировал(а) mes - 21.1.2011, 19:10


--------------------
PM MAIL WWW   Вверх
Страницы: (4) Все 1 [2] 3 4 
Ответ в темуСоздание новой темы Создание опроса
Правила форума "C/C++: Для новичков"
JackYF
bsa

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

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


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

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


 




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


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

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