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

Класс С++ - C++

Восстановить пароль Регистрация
 
 
Vidok
 Аватар для Vidok
36 / 36 / 2
Регистрация: 03.09.2011
Сообщений: 279
22.02.2012, 22:14     Класс С++ #1
Ребят, подскажите есть ли разница писать прототипы в классе, а реализацию отдельно от класса или реализацию в самом классе?
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
22.02.2012, 22:14     Класс С++
Посмотрите здесь:

C++ Создать Класс Coins (монеты). Класс сохраняет массив из 3 монет ...
Иерархия геометрических объектов: клас точка->класс квадрат->класс прямоугольник C++
Создать класс Pair(пара чисел) и класс-наследник Fraction C++
C++ Класс домов и класс улиц для учета поступлений квартплаты. Массив
Разработать класс Man (человек) и производный класс Student (студент). Описать атрибуты. C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Jupiter
Каратель
Эксперт C++
6543 / 3963 / 226
Регистрация: 26.03.2010
Сообщений: 9,273
Записей в блоге: 1
Завершенные тесты: 2
22.02.2012, 22:24     Класс С++ #2
методы реализованные внутри класса по умолчанию являются inline методами
Vidok
 Аватар для Vidok
36 / 36 / 2
Регистрация: 03.09.2011
Сообщений: 279
22.02.2012, 22:25  [ТС]     Класс С++ #3
А на функциональность и взаимодействие между другими классами не влияет?
ITDeveloper
 Аватар для ITDeveloper
85 / 85 / 5
Регистрация: 14.01.2011
Сообщений: 263
22.02.2012, 22:27     Класс С++ #4
Лучше разделять интерфейс и реализацию!
Vidok
 Аватар для Vidok
36 / 36 / 2
Регистрация: 03.09.2011
Сообщений: 279
22.02.2012, 22:32  [ТС]     Класс С++ #5
Согласен, но меня именно возможности интересуют, вот например, если у нас есть
C++
1
bool T::operator==(T & a, T &b)
мы сравниваем 2 объекта и разницы нет если написать в классе, будет взаимодействие с this, а есть такие моменты когда обязательно или там или там?
silent_1991
Эксперт C++
4938 / 3014 / 149
Регистрация: 11.11.2009
Сообщений: 7,024
Завершенные тесты: 1
22.02.2012, 23:58     Класс С++ #6
Vidok, вот тут как раз разница огромная, один вариант - реализация оператора в виде метода класса, другой - в виде глобальной функции. При использовании разница нет, но идеологически оно огромна.
Vidok
 Аватар для Vidok
36 / 36 / 2
Регистрация: 03.09.2011
Сообщений: 279
23.02.2012, 00:03  [ТС]     Класс С++ #7
Спасибо, в этом плане более менее ясно, но метод функции public видят же все, но в то же время нужно объявлять пространство имен и использовать только для объектов этого класса, а если глобально, то мы можем так же использовать приведения типов с одного класса в другой в некоторых случаях, правильно понимаю?
Chelioss
179 / 179 / 4
Регистрация: 08.01.2011
Сообщений: 1,131
23.02.2012, 00:32     Класс С++ #8
Цитата Сообщение от silent_1991 Посмотреть сообщение
При использовании разница нет,
Есть же.
Допустим, можно преобразовать тип A в B, тогда
если оператор == определен как глобальная функция для класса B, тогда
C++
1
2
3
4
B == B; // ok
B == A; // ok
A == B; // ok
A == A; // ok
если оператор == определен как метод для класса B, то последние два варианта не сработают. Будет ошибка компиляции.

Цитата Сообщение от Vidok Посмотреть сообщение
Спасибо, в этом плане более менее ясно, но метод функции public видят же все, но в то же время нужно объявлять пространство имен и использовать только для объектов этого класса, а если глобально, то мы можем так же использовать приведения типов с одного класса в другой в некоторых случаях, правильно понимаю?
Выше возможно ответ на ваш вопрос.
silent_1991
Эксперт C++
4938 / 3014 / 149
Регистрация: 11.11.2009
Сообщений: 7,024
Завершенные тесты: 1
23.02.2012, 00:33     Класс С++ #9
Цитата Сообщение от Vidok Посмотреть сообщение
но метод функции public видят же все, но в то же время нужно объявлять пространство имен и использовать только для объектов этого класса
Тыдыщь...
Сформулируйте мысль более внятно.

Добавлено через 1 минуту
Chelioss, да суть-то не в этом, а в том, что изначально вопросу звучал как "писать ли реализацию внутри или вне тела класса", а потому резко перешёл в сравнение методов и функций.
Vidok
 Аватар для Vidok
36 / 36 / 2
Регистрация: 03.09.2011
Сообщений: 279
23.02.2012, 00:45  [ТС]     Класс С++ #10
C++
1
2
3
4
5
6
7
8
9
bool T::operator=(T & b){
......
return *this;
}
//или
bool operator=(T & a, T & b){
.....
return a;
}
В первом случае говорим откуда, присваиваем. Как я понимаю ее можно использовать только для объектов класса T. Во втором, например у нас есть класс А, и например есть конструктор копий с А в Т, значит второе мы можем так же использовать для другого класса, а первое только для одного?

Протупил, там не bool
Chelioss
179 / 179 / 4
Регистрация: 08.01.2011
Сообщений: 1,131
23.02.2012, 00:49     Класс С++ #11
Vidok
Я же написал выше как есть.
Для метода можно
T = T
T = A
Для функции
T = T
T = A
A = T
A = A
silent_1991
Эксперт C++
4938 / 3014 / 149
Регистрация: 11.11.2009
Сообщений: 7,024
Завершенные тесты: 1
23.02.2012, 00:59     Класс С++ #12
Chelioss, одна мааааленькая проблемка... Оператор присваивания не может быть функцией, только методом.
Vidok
 Аватар для Vidok
36 / 36 / 2
Регистрация: 03.09.2011
Сообщений: 279
23.02.2012, 01:04  [ТС]     Класс С++ #13
То есть второе не правильно? Но почему я не могу послать 2 объекта и один из них переприсвоить значениями другого?
silent_1991
Эксперт C++
4938 / 3014 / 149
Регистрация: 11.11.2009
Сообщений: 7,024
Завершенные тесты: 1
23.02.2012, 01:05     Класс С++ #14
Vidok, потому что оператора присваивания обязан быть методом класса. Надо присвоить один объект другому "не своего" типа - используйте пользовательские операторы преобразования.
Chelioss
179 / 179 / 4
Регистрация: 08.01.2011
Сообщений: 1,131
23.02.2012, 01:05     Класс С++ #15
Цитата Сообщение от Vidok Посмотреть сообщение
То есть второе не правильно? Но почему я не могу послать 2 объекта и один из них переприсвоить значениями другого?
То правило, которое я написал, работает для случаев, когда возможен и метод и функция. Например, оператор == или оператор +.
Для таких операторов, как, +, == и т.д., лучше делать в виде глобальной функции, тогда будет больше вариантов использования.
Vidok
 Аватар для Vidok
36 / 36 / 2
Регистрация: 03.09.2011
Сообщений: 279
23.02.2012, 01:09  [ТС]     Класс С++ #16
Я об этом писал, понял, спасибо. Ну а для = ? Почему нельзя
silent_1991
Эксперт C++
4938 / 3014 / 149
Регистрация: 11.11.2009
Сообщений: 7,024
Завершенные тесты: 1
23.02.2012, 01:14     Класс С++ #17
Vidok, Потому что нельзя. Вы какой ответ-то ждёте?
Vidok
 Аватар для Vidok
36 / 36 / 2
Регистрация: 03.09.2011
Сообщений: 279
23.02.2012, 01:19  [ТС]     Класс С++ #18
silent_1991, нельзя потому что это не позволит...и т.д хех, ну ладно, сейчас попробую
silent_1991
Эксперт C++
4938 / 3014 / 149
Регистрация: 11.11.2009
Сообщений: 7,024
Завершенные тесты: 1
23.02.2012, 01:19     Класс С++ #19
Vidok, нельзя, потому что это не позволит компилятор
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
23.02.2012, 01:20     Класс С++
Еще ссылки по теме:

C++ Разработать класс Tableware (посуда) и производный класс Dish (тарелка). Описать атрибуты
Подробно прокомментировать класс PolarCoordinates, представляющий собой класс координат точки на плоскости C++
C++ Ошибка в выводе данных, класс выводит правильно, а класс в классе - нет

Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
Vidok
 Аватар для Vidok
36 / 36 / 2
Регистрация: 03.09.2011
Сообщений: 279
23.02.2012, 01:20  [ТС]     Класс С++ #20
ну блин, вроде как логично написал и должно работать с первого взгляда
Yandex
Объявления
23.02.2012, 01:20     Класс С++
Ответ Создать тему
Опции темы

Текущее время: 14:56. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru