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

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

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

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

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

Ребят, подскажите есть ли разница писать прототипы в классе, а реализацию отдельно от класса или реализацию в самом классе?
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
22.02.2012, 22:14
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Класс С++ (C++):

Есть класс A и класс B, класс B вложен в класс A и вложен в него, как классу B получить доступ к переменным класса A просто по имени? - C++
На самом деле ничё фантастического я не прошу, ведь: template <class T> class matrix { friend class diagonal; ...

Класс таблиц баз данных и класс записей в таблице(реляционная таблица). Предусмотреть класс связей между таблицами - C++
Здравствуйте! Никак не могу продумать структуру этой программы. Проходим наследование, но я все равно не знаю, как его здесь применить. Как...

Отдельно класс данных, класс формул и главный класс - C++
Здравствуйте! У меня есть три вопроса. Первый вопрос. Скажите пожалуйста! Правильный ли это подход к созданию приложений :...

Реализовать класс родительский класс "Пара чисел" и класс-наследник "Комплексное число" - C++
Ткма работы создать класс pair (пара чисел); определить метод перемножения полей и операцию сложения пар (a,b)+(c,d) =(a+b,c+d)...

Класс, производный класс, паблик-класс - C++
Задание: Создать класс колесо, которое имеет радиус. Определить конструкторы и метод доступа. Создать класс машин, содержащий класс колесо....

Создать класс “Автомагазин”, состоящей из класса ”Марки машин”. Класс “Автомагазин ”:название магазина, адрес, телефон. Класс “ Марки машин ”: марка - C++
Создать класс “Автомагазин”, состоящей из класса ”Марки машин”. Класс “Автомагазин ”:название магазина, адрес, телефон. Класс “ Марки...

25
Jupiter
Каратель
Эксперт С++
6559 / 3980 / 227
Регистрация: 26.03.2010
Сообщений: 9,273
Записей в блоге: 1
Завершенные тесты: 2
22.02.2012, 22:24 #2
методы реализованные внутри класса по умолчанию являются inline методами
0
Vidok
37 / 37 / 2
Регистрация: 03.09.2011
Сообщений: 279
22.02.2012, 22:25  [ТС] #3
А на функциональность и взаимодействие между другими классами не влияет?
0
ITDeveloper
85 / 85 / 5
Регистрация: 14.01.2011
Сообщений: 263
22.02.2012, 22:27 #4
Лучше разделять интерфейс и реализацию!
0
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, а есть такие моменты когда обязательно или там или там?
0
silent_1991
Эксперт С++
4985 / 3042 / 149
Регистрация: 11.11.2009
Сообщений: 7,027
Завершенные тесты: 1
22.02.2012, 23:58 #6
Vidok, вот тут как раз разница огромная, один вариант - реализация оператора в виде метода класса, другой - в виде глобальной функции. При использовании разница нет, но идеологически оно огромна.
0
Vidok
37 / 37 / 2
Регистрация: 03.09.2011
Сообщений: 279
23.02.2012, 00:03  [ТС] #7
Спасибо, в этом плане более менее ясно, но метод функции public видят же все, но в то же время нужно объявлять пространство имен и использовать только для объектов этого класса, а если глобально, то мы можем так же использовать приведения типов с одного класса в другой в некоторых случаях, правильно понимаю?
0
Chelioss
180 / 180 / 4
Регистрация: 08.01.2011
Сообщений: 1,133
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 видят же все, но в то же время нужно объявлять пространство имен и использовать только для объектов этого класса, а если глобально, то мы можем так же использовать приведения типов с одного класса в другой в некоторых случаях, правильно понимаю?
Выше возможно ответ на ваш вопрос.
0
silent_1991
Эксперт С++
4985 / 3042 / 149
Регистрация: 11.11.2009
Сообщений: 7,027
Завершенные тесты: 1
23.02.2012, 00:33 #9
Цитата Сообщение от Vidok Посмотреть сообщение
но метод функции public видят же все, но в то же время нужно объявлять пространство имен и использовать только для объектов этого класса
Тыдыщь...
Сформулируйте мысль более внятно.

Добавлено через 1 минуту
Chelioss, да суть-то не в этом, а в том, что изначально вопросу звучал как "писать ли реализацию внутри или вне тела класса", а потому резко перешёл в сравнение методов и функций.
1
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
0
Chelioss
180 / 180 / 4
Регистрация: 08.01.2011
Сообщений: 1,133
23.02.2012, 00:49 #11
Vidok
Я же написал выше как есть.
Для метода можно
T = T
T = A
Для функции
T = T
T = A
A = T
A = A
0
silent_1991
Эксперт С++
4985 / 3042 / 149
Регистрация: 11.11.2009
Сообщений: 7,027
Завершенные тесты: 1
23.02.2012, 00:59 #12
Chelioss, одна мааааленькая проблемка... Оператор присваивания не может быть функцией, только методом.
1
Vidok
37 / 37 / 2
Регистрация: 03.09.2011
Сообщений: 279
23.02.2012, 01:04  [ТС] #13
То есть второе не правильно? Но почему я не могу послать 2 объекта и один из них переприсвоить значениями другого?
0
silent_1991
Эксперт С++
4985 / 3042 / 149
Регистрация: 11.11.2009
Сообщений: 7,027
Завершенные тесты: 1
23.02.2012, 01:05 #14
Vidok, потому что оператора присваивания обязан быть методом класса. Надо присвоить один объект другому "не своего" типа - используйте пользовательские операторы преобразования.
0
Chelioss
180 / 180 / 4
Регистрация: 08.01.2011
Сообщений: 1,133
23.02.2012, 01:05 #15
Цитата Сообщение от Vidok Посмотреть сообщение
То есть второе не правильно? Но почему я не могу послать 2 объекта и один из них переприсвоить значениями другого?
То правило, которое я написал, работает для случаев, когда возможен и метод и функция. Например, оператор == или оператор +.
Для таких операторов, как, +, == и т.д., лучше делать в виде глобальной функции, тогда будет больше вариантов использования.
0
23.02.2012, 01:05
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
23.02.2012, 01:05
Привет! Вот еще темы с ответами:

Абстрактный класс CGraphicsObject, его наследник - базовый класс CPoint, и класс - наследник от CPoint - C++
Всем доброй ночи! Очень нужна помощь и по мере возможности разъяснения на темы: абстрактный класс в задании(что он из себя представляет и...

Реализовать класс Goods используя для представления цены класс Money - C++
Реализовать класс Goods (пункт 1 ), используя для представления цены класс Money с пункта 2 Реализовать метод уценки товара, уменьшая цену...

Иерархия геометрических объектов: клас точка->класс квадрат->класс прямоугольник - C++
Иерархия геометрических объектов: класс точка->класс квадрат->класс прямоугольник. Построить эту иерархию наследованием.. Прошу помочь -...

Ошибка в выводе данных, класс выводит правильно, а класс в классе - нет - C++
Неизвестная для меня проблема. Класс выводит данные правильно из Consigment, а вот третий экземпляр класса, работает не верно, если...


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

Или воспользуйтесь поиском по форуму:
15
Ответ Создать тему
Опции темы

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