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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Функция определена в классе, А тело функции находится вне класса. 
:(
    Опции темы
Wowa
Дата 14.12.2004, 13:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
Group Icon


Профиль
Группа: Админ
Сообщений: 15017
Регистрация: 14.9.2000
Где: Винград

Репутация: нет
Всего: 290



Функция определена в классе, а тело функции находится вне класса.
Почему так делают?

Или жетело функции располагают в:

Код

class name {
public:
void funktion() {тело};


}


Разве так удобно? Имхо гораздо удобнее в public, pivate, protected описать только по-определять функции, а снизу в этом же классе уже изложить сами функции. Такое возможно?

А то я видел только еще такой вариант:

Код

class name {
public:
void funktion();

}

name::function () {


}


PS. За синтаксис не ручаюсь smile
PM WWW   Вверх
_hunter
Дата 14.12.2004, 14:12 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Участник Клуба
Сообщений: 8564
Регистрация: 24.6.2003
Где: Europe::Ukraine:: Kiev

Репутация: 16
Всего: 98



class name {
public:
void funktion() {тело};

}

это делается если тело функции -- пара строк ( например:
...
public:
...
int getId() {return id; };
)
>>Разве так удобно?
мне -- удобно
>>Имхо гораздо удобнее в public, pivate, protected описать только по-определять функции, а снизу в этом же классе уже изложить сами функции.
это из Java?

>>А то я видел только еще такой вариант:
class name {
public:
void funktion();
}
name::function () {
}

так можно ( только реализацию в .cpp вынести нужно )


--------------------
Tempora mutantur, et nos mutamur in illis...
PM ICQ   Вверх
Wowa
Дата 14.12.2004, 14:23 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
Group Icon


Профиль
Группа: Админ
Сообщений: 15017
Регистрация: 14.9.2000
Где: Винград

Репутация: нет
Всего: 290



Цитата(_hunter @ 14.12.2004, 12:12)
так можно ( только реализацию в .cpp вынести нужно )

А поподробнее можно? Разве классы не в .cpp создавать надо?


Цитата(_hunter @ 14.12.2004, 12:12)
class name {
public:
void funktion() {тело};

}

это делается если тело функции -- пара строк ( например:
...
public:
...
int getId() {return id; };
)
>>Разве так удобно?
мне -- удобно

А если не пару строк, то как поступать?



Цитата(_hunter @ 14.12.2004, 12:12)
это из Java?

Хм.. из логики smile

Ведь если мы имеем обычную программу(не ООП), то в самом начале мы задаем список функций, которые есть в программе, а снизу сами функции.
PM WWW   Вверх
bel_nikita
Дата 14.12.2004, 14:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Эксперт
Сообщений: 2304
Регистрация: 12.10.2003
Где: Поезд №21/22 ( ст . Прага )

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



Admin
Цитата
Разве так удобно? Имхо гораздо удобнее в public, pivate, protected описать только по-определять функции, а снизу в этом же классе уже изложить сами функции. Такое возможно?

Это уже дело вкуса и стиля программиования smile

Если функция объявлена и определена в *.Н - это inline функция. Вот, такое будет говорить компилятору, что это инлайн функция:
Код

class name {
public:
void funktion() {тело};
};

Но в тоже время, это не факт, что она 100% будет инлайн. Это будет решать компилятор smile Т.е. если в теле функции будет ветвления, типа if() {...} else{...}, то компилятор не будет приминять идентифиукатор inline. Т.е. это на усмотрение компилятора. Но если мы хотим все же сделать 100% инлайн, то нужно добавить, например в MSVC, идентификатор __forceinline.

З.Ы.: Не знаю, что-то написал. Если не понятно, извиняйте smile

Добавлено @ 14:26
Цитата
А поподробнее можно? Разве классы не в .cpp создавать надо?

Можно smile


--------------------
user posted image — регистрация доменов от 150 руб.
PM MAIL WWW ICQ   Вверх
Wowa
Дата 14.12.2004, 14:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
Group Icon


Профиль
Группа: Админ
Сообщений: 15017
Регистрация: 14.9.2000
Где: Винград

Репутация: нет
Всего: 290



Функции лучше создавать в файлах с расширением .h, а не .cpp ?
PM WWW   Вверх
_hunter
Дата 14.12.2004, 14:31 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Участник Клуба
Сообщений: 8564
Регистрация: 24.6.2003
Где: Europe::Ukraine:: Kiev

Репутация: 16
Всего: 98



Цитата

А поподробнее можно? Разве классы не в .cpp создавать надо?


классы _создаются_ в двух местах:

в .h файле идет описание:
Код

class name
{
public:
   void funktion();
};


а в .cpp идет реализация:
Код

void name::funktion()
{
...
}


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

Это сообщение отредактировал(а) _hunter - 14.12.2004, 14:33


--------------------
Tempora mutantur, et nos mutamur in illis...
PM ICQ   Вверх
srd
Дата 14.12.2004, 14:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Нереварин
**


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

Репутация: 27
Всего: 49



Цитата

Но если мы хотим все же сделать 100% инлайн, то нужно добавить, например в MSVC, идентификатор __forceinline.

Не факт, что 100% smile
Вот это компилятор встроить не сможет
Код

__forceinline void func(void)
{
   // ...
}

int main(void)
{
   void (*p)(void) = func;

    func(); // функция встроена не будет!
}



--------------------
Не смей читать мою подпись!!!
PM MAIL Jabber   Вверх
bel_nikita
Дата 14.12.2004, 14:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Эксперт
Сообщений: 2304
Регистрация: 12.10.2003
Где: Поезд №21/22 ( ст . Прага )

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



Admin
Цитата
Функции лучше создавать в файлах с расширением .h, а не .cpp ?

Нннн-ет. Все же лучше в *.cpp smile
ИМХО: если класс маленький, т.е. с парой-другой коротеньких функция, то лучше все запихнуть в *.h


--------------------
user posted image — регистрация доменов от 150 руб.
PM MAIL WWW ICQ   Вверх
Wowa
Дата 14.12.2004, 14:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
Group Icon


Профиль
Группа: Админ
Сообщений: 15017
Регистрация: 14.9.2000
Где: Винград

Репутация: нет
Всего: 290



Цитата(_hunter @ 14.12.2004, 12:31)
про джаву упомянул так как там используют однофайловую структуру ( очень похожую на описанную )

ага..., вот как интересно... Оказывается все-таки стандартом в С++ является разделение описания и реализации класса.
Теперь все сильно проясняется.
Добавлено @ 14:35
Цитата(bel_nikita @ 14.12.2004, 12:34)
ИМХО: если класс маленький, т.е. с парой-другой коротеньких функция, то лучше все запихнуть в *.h

И при этом реализацию функий делать прямо в секции public, private или protected?
PM WWW   Вверх
_hunter
Дата 14.12.2004, 14:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Участник Клуба
Сообщений: 8564
Регистрация: 24.6.2003
Где: Europe::Ukraine:: Kiev

Репутация: 16
Всего: 98



соответственно _маленькие_ функции ( выполняющие _понятные_ действия ) лучше писать в опимании класса, остальные -- выносить в реализацию

но, как уже упоминали, это все дело стиля


--------------------
Tempora mutantur, et nos mutamur in illis...
PM ICQ   Вверх
Wowa
Дата 14.12.2004, 14:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
Group Icon


Профиль
Группа: Админ
Сообщений: 15017
Регистрация: 14.9.2000
Где: Винград

Репутация: нет
Всего: 290



А по другому не дано? Т.е. делать реализацию внутри класса, но не в описании?
PM WWW   Вверх
_hunter
Дата 14.12.2004, 14:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Участник Клуба
Сообщений: 8564
Регистрация: 24.6.2003
Где: Europe::Ukraine:: Kiev

Репутация: 16
Всего: 98



не в секции, а именно в месте определения:
Код

class name
{
public:
   void funktion() { что-то_делаем; };
};




--------------------
Tempora mutantur, et nos mutamur in illis...
PM ICQ   Вверх
NiJazz
Дата 15.12.2004, 09:33 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Jazz coder
****


Профиль
Группа: Экс. модератор
Сообщений: 2286
Регистрация: 10.8.2003
Где: Москва

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



Если описание класса делать в заголовочном файле h, а реализацию - в cpp, это даёт возможность без проблем использовать наш класс в других наших программах, где нужно будет только включить наш заголовочный файл.
А вот когда создали Object Pascal, то там это реализовали путем введения областей interface и implementation. Видимо, если модуль с описанием класса используется в других модулях, то компилятор ориентируется лишь в interface области кода.
PM MAIL   Вверх
azesmcar
Дата 15.12.2004, 09:48 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


uploading...
****


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

Репутация: 81
Всего: 211



Представь, тебе надо написать интерфейс. Короче говоря класс который потом будет

использоваться тобой же или другим программистом. Если написать все в Header -е то тебе придется все include-ы которые будет использовать твой класс пихать в свой header файл...А теперь представь что тому программисту который будет использовать твой интерфейс совсем неохота чтоб у него в программе после инклуда твоего .h файла появился например list или stdio.h хотя бы потому что list это девичья фамилия его тещи которая так ненавящиво напоминает ему что новый год хочешь не хочешь а придется провести с вышеупомянутой родственницей да еще и поздравлять ее с праздником и целовать ее прыщавую физиономию..ну не любит он тещю, бывает такое...а ты как бы заставляешь его инклудить все то что нужно тебе, а быть может совсем не нужно ему...(вполне возможно что у него тоже есть класс list или функция принтф)...
Вобщем ВСЕ функции желательно писать в CPP файле...smile
PM   Вверх
NiJazz
Дата 15.12.2004, 10:22 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Jazz coder
****


Профиль
Группа: Экс. модератор
Сообщений: 2286
Регистрация: 10.8.2003
Где: Москва

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



Цитата
Представь, тебе надо написать интерфейс. Короче говоря класс который потом будет

использоваться тобой же или другим программистом. Если написать все в Header -е то тебе придется все include-ы которые будет использовать твой класс пихать в свой header файл...А теперь представь что тому программисту который будет использовать твой интерфейс совсем неохота чтоб у него в программе после инклуда твоего .h файла появился например list или stdio.h хотя бы потому что list это девичья фамилия его тещи которая так ненавящиво напоминает ему что новый год хочешь не хочешь а придется провести с вышеупомянутой родственницей да еще и поздравлять ее с праздником и целовать ее прыщавую физиономию..ну не любит он тещю, бывает такое...а ты как бы заставляешь его инклудить все то что нужно тебе, а быть может совсем не нужно ему...(вполне возможно что у него тоже есть класс list или функция принтф)...
Вобщем ВСЕ функции желательно писать в CPP файле...smile

Представляете, если бы книги так писали. smile smile smile
PM MAIL   Вверх
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С++:Общие вопросы"
Earnest Daevaorn

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

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

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

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


 




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


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

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