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

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
 
Vidok
 Аватар для Vidok
37 / 37 / 2
Регистрация: 03.09.2011
Сообщений: 279
#1

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

22.02.2012, 22:14. Просмотров 1003. Ответов 25
Метки нет (Все метки)

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

Создайте класс Date. Добавить в строковый класс функцию C++
Как преобразовать указатель на класс к указателю на асбтрактный класс? C++
C++ Класс домов и класс улиц для учета поступлений квартплаты. Массив
Указатели в базовом классе на базовый класс и производный класс C++
C++ С++ класс (создайте класс с именем Complex для выполнения в арифмитических операий с комплексными числами))
Класс, для полей которого нужно использовать класс C++
C++ Класс Quadrangle (четырехугольник). Класс хранит Декартовы координаты четырех углов четырехугольника
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Jupiter
Каратель
Эксперт C++
6548 / 3968 / 226
Регистрация: 26.03.2010
Сообщений: 9,273
Записей в блоге: 1
Завершенные тесты: 2
22.02.2012, 22:24     Класс С++ #2
методы реализованные внутри класса по умолчанию являются inline методами
Vidok
 Аватар для Vidok
37 / 37 / 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
37 / 37 / 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++
4949 / 3025 / 149
Регистрация: 11.11.2009
Сообщений: 7,024
Завершенные тесты: 1
22.02.2012, 23:58     Класс С++ #6
Vidok, вот тут как раз разница огромная, один вариант - реализация оператора в виде метода класса, другой - в виде глобальной функции. При использовании разница нет, но идеологически оно огромна.
Vidok
 Аватар для Vidok
37 / 37 / 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++
4949 / 3025 / 149
Регистрация: 11.11.2009
Сообщений: 7,024
Завершенные тесты: 1
23.02.2012, 00:33     Класс С++ #9
Цитата Сообщение от Vidok Посмотреть сообщение
но метод функции public видят же все, но в то же время нужно объявлять пространство имен и использовать только для объектов этого класса
Тыдыщь...
Сформулируйте мысль более внятно.

Добавлено через 1 минуту
Chelioss, да суть-то не в этом, а в том, что изначально вопросу звучал как "писать ли реализацию внутри или вне тела класса", а потому резко перешёл в сравнение методов и функций.
Vidok
 Аватар для Vidok
37 / 37 / 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++
4949 / 3025 / 149
Регистрация: 11.11.2009
Сообщений: 7,024
Завершенные тесты: 1
23.02.2012, 00:59     Класс С++ #12
Chelioss, одна мааааленькая проблемка... Оператор присваивания не может быть функцией, только методом.
Vidok
 Аватар для Vidok
37 / 37 / 2
Регистрация: 03.09.2011
Сообщений: 279
23.02.2012, 01:04  [ТС]     Класс С++ #13
То есть второе не правильно? Но почему я не могу послать 2 объекта и один из них переприсвоить значениями другого?
silent_1991
Эксперт C++
4949 / 3025 / 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
37 / 37 / 2
Регистрация: 03.09.2011
Сообщений: 279
23.02.2012, 01:09  [ТС]     Класс С++ #16
Я об этом писал, понял, спасибо. Ну а для = ? Почему нельзя
silent_1991
Эксперт C++
4949 / 3025 / 149
Регистрация: 11.11.2009
Сообщений: 7,024
Завершенные тесты: 1
23.02.2012, 01:14     Класс С++ #17
Vidok, Потому что нельзя. Вы какой ответ-то ждёте?
Vidok
 Аватар для Vidok
37 / 37 / 2
Регистрация: 03.09.2011
Сообщений: 279
23.02.2012, 01:19  [ТС]     Класс С++ #18
silent_1991, нельзя потому что это не позволит...и т.д хех, ну ладно, сейчас попробую
silent_1991
Эксперт C++
4949 / 3025 / 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++ Область видимости. один класс не видит другой класс
Подробно прокомментировать класс PolarCoordinates, представляющий собой класс координат точки на плоскости C++
Наследование: базовый класс Квадрат, производный класс Пирамида C++
C++ Как создать класс со вложенной структурой указателей на класс?
Создать класс с одним полем и класс наследник с другим C++

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

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

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