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

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

Войти
Регистрация
Восстановить пароль
 
 
Аммурка
4 / 4 / 0
Регистрация: 10.02.2014
Сообщений: 30
#1

Поля, переменные; Методы, функции; В чем отличие? - C++

22.02.2014, 22:45. Просмотров 1026. Ответов 16
Метки нет (Все метки)

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

В чем отличие While от Do... While? - C++
Я понял ,что в While сначала проверяется условие,а потом если оно истинно выполняются операторы,а в Do...while все наоборот . Как я...

В чем отличие с++ и visual c++ ? - C++
выбирая книгу,по программированию на языке с++ на этом сайте, наткнулся на разделение в отдельные классы C++ и Visual C++, объясните...

cin.get в чем отличие ? - C++
Всем доброго времени суток, подскажите в чем отличие в этих строках: char a; cin.get(a); a = cin.get();

В чем отличие printf от cout? - C++
Вопрос по теме , чем они отличаются и что лучше использовать? :)

В чем отличие decltype и auto - C++
в чем отличие типа decltype и типа auto?

В чем отличие typename от class? - C++
Зачем нужно typename В чем отличие от class ?

16
DrOffset
7377 / 4454 / 1009
Регистрация: 30.01.2014
Сообщений: 7,304
22.02.2014, 22:48 #2
Термины поля и методы обычно применяют к классам. То есть поля, это такие переменные, которые в классе (структуре). А методы, это такие функции, которые в классе.
1
Аммурка
4 / 4 / 0
Регистрация: 10.02.2014
Сообщений: 30
22.02.2014, 22:50  [ТС] #3
Я ответил что-то типу этого, но сказала что этот ответ не совсем верен. Можно дать более точный ответ.
0
DU
1484 / 1130 / 45
Регистрация: 05.12.2011
Сообщений: 2,279
22.02.2014, 22:52 #4
в таких случаях нужен диалог с тем, кто задал вопрос для уточнения.
ответить можно совершенно правильно, но это типа не то, что ожидал спрашивающий.
например:
- какой сегодня день?
- воскресение.
- нет. это не совсем то, что я хотел услышать. сегодня 22 февраля 2014 года. садись два.
2
Аммурка
4 / 4 / 0
Регистрация: 10.02.2014
Сообщений: 30
22.02.2014, 22:55  [ТС] #5
Возможно, но я думаю есть же какое-то явное отличие, кроме того что уже написано... Да и на крайний случай можно сказать сегодня воскресение 22 февраля 2014 года.
P.S.: Сегодня суббота.
0
S_el
2113 / 1633 / 308
Регистрация: 15.12.2013
Сообщений: 6,395
22.02.2014, 22:55 #6
Цитата Сообщение от Аммурка Посмотреть сообщение
Я ответил что-то типу этого, но сказала что этот ответ не совсем верен. Можно дать более точный ответ.
Скажи,что поля-переменные класса,а методы-его функции.
1
DrOffset
7377 / 4454 / 1009
Регистрация: 30.01.2014
Сообщений: 7,304
22.02.2014, 22:57 #7
Лучший ответ Сообщение было отмечено автором темы, экспертом или модератором как ответ
Цитата Сообщение от Аммурка Посмотреть сообщение
Можно дать более точный ответ.
Преподаватель играет в игру "угадай что я имею в виду"?
Ответ, который я дал - более чем точный с точки зрения терминологии.
Может быть препод спрашивал не терминологическое различие, а функциональное?
Например про то, что метод, это такая функция, у которой есть неявный параметр-указатель на экземпляр класса, которому метод принадлежит, в теле метода доступный через ключевое слово this?
Или например, что некоторые методы никогда не могут быть функциями (например operator[]), а некоторые функции не могут быть методами (например operator== от двух аргументов)?

Добавлено через 1 минуту
Цитата Сообщение от Аммурка Посмотреть сообщение
P.S.: Сегодня суббота.
Зависит от часового пояса
3
Аммурка
4 / 4 / 0
Регистрация: 10.02.2014
Сообщений: 30
22.02.2014, 23:00  [ТС] #8
Или например, что некоторые методы никогда не могут быть функциями (например operator[]), а некоторые функции не могут быть методами (например operator== от двух аргументов)?
Вот что-то похожое и нужно сказать, только не так обширно. А именно почему
некоторые методы никогда не могут быть функциями, а некоторые функции не могут быть методами
. Сможешь объяснить? И поля тоже затронь.
Зависит от часового пояса
тогда уже 23
0
mustimur
268 / 222 / 57
Регистрация: 22.11.2013
Сообщений: 832
Записей в блоге: 1
22.02.2014, 23:06 #9
Цитата Сообщение от DrOffset Посмотреть сообщение
Например про то, что метод, это такая функция, у которой есть неявный параметр-указатель на экземпляр класса, которому метод принадлежит, в теле метода доступный через ключевое слово this?
Или например, что некоторые методы никогда не могут быть функциями (например operator[]), а некоторые функции не могут быть методами (например operator== от двух аргументов)?

Не по теме:

Воот, а сразу бочку на препода катите, не обижайся Аммурка, не в той огород камень, я тебя не знаю, ты меня. Но студенты услышав вопрос, так потом его исковеркивают смысл, что диву даешься..

Цитата Сообщение от Аммурка Посмотреть сообщение
Я ответил что-то типу этого
знаешь "Мама мыла раму"это что типа "Рама мыла маму" но смысол-то. А препод скорее всего просил просто уточнить нюансы, или просил тебя поправиться

1
Аммурка
4 / 4 / 0
Регистрация: 10.02.2014
Сообщений: 30
22.02.2014, 23:12  [ТС] #10
просил просто уточнить нюансы, или просил тебя поправиться
скорее хотел услышать
некоторые методы никогда не могут быть функциями, а некоторые функции не могут быть методами.
НО уверен что следующим вопросом будет:
Почему?
Не по теме:
Я ответил что-то типу этого
имел в виду что ответил тем же смыслом.
0
Елена Едыгарова
34 / 20 / 9
Регистрация: 24.01.2014
Сообщений: 80
22.02.2014, 23:29 #11
Хм, интересно)... В сети выловила, что методы, в отличие от функций, имеют "упрощенный" доступ к данным (полям класса)... Кроме того, возможно, есть разница по размещению в памяти у функций и методов....

Что же конкретно она имела в виду?
0
DrOffset
7377 / 4454 / 1009
Регистрация: 30.01.2014
Сообщений: 7,304
22.02.2014, 23:40 #12
Лучший ответ Сообщение было отмечено автором темы, экспертом или модератором как ответ
mustimur, Не очень понял смысл твоего цитирования
Аммурка, тут в двух словах не расскажешь.
Цитата Сообщение от Аммурка Посмотреть сообщение
Сможешь объяснить? И поля тоже затронь.
Таких примеров много и каждый надо отдельно разбирать.
А есть еще статические функции и переменные класса. И считать ли их методами или не методами зависит от смысловой нагрузки, которую разработчик им определил.
Конкретно с операцией индексации - ее нельзя применять в отрыве от объекта (как и некоторые другие, например взятие адреса), поэтому стандарт языка запрещает определять ее отдельно.
Оператор сравнения бывает в двух формах: с одним аргументом и с двумя. Оператор с одним аргументом - это всегда метод, предполагается, что второй аргумент - это тот самые неявный this. Оператор с двумя аргументами - функция - разрешать помещать ее в класс (получается будет три аргумента) - не логично, поэтому это тоже запрещено.

Добавлено через 9 минут
Цитата Сообщение от Елена Едыгарова Посмотреть сообщение
В сети выловила, что методы, в отличие от функций, имеют "упрощенный" доступ к данным (полям класса)... Кроме того, возможно, есть разница по размещению в памяти у функций и методов....
Что же конкретно она имела в виду?
Упрощенный - это как раз и есть this, который можно не писать - для доступа к данным.
C++
1
2
3
4
5
6
7
8
9
10
void Class::method()
{
    this->data = 2;
    data = 2;
}
// и функция
void func(Class * obj)
{
    obj->data = 2;
}
где data - поле типа int класса Class. Замечу, что многие считают, что в подобных случаях, как в примере, функция func тоже может называться методом.
Надеюсь теперь понятно почему нельзя ответить однозначно на вопрос без четкой формулировки. Если тот простейший ответ в первом посте преподавателя не устроил, то здесь можно до бесконечности гадать что он имел в виду в зависимости от его личных предпочтений и его личного опыта в программировании.

Насчет размещения в памяти - еще более сложный вопрос, который требует рассмотрения в рамках конкретной системы, компилятора и настроек компилятора.
3
Аммурка
4 / 4 / 0
Регистрация: 10.02.2014
Сообщений: 30
22.02.2014, 23:46  [ТС] #13
спасибо, думаю этого достаточно, правда про поля я так и не услышал ничего - потому что там все банально просто? В классе - поле, нет - переменная?
0
DrOffset
7377 / 4454 / 1009
Регистрация: 30.01.2014
Сообщений: 7,304
22.02.2014, 23:58 #14
Цитата Сообщение от Аммурка Посмотреть сообщение
В классе - поле, нет - переменная?
В общем да.
Есть одно различие во взятии адреса поля. Адрес поля можно записать так:
C++
1
int * pData = &obj.data;
А можно так:
C++
1
int Class::*pData = &Class::data;
В первом случае это будет как бы "абсолютный адрес" (в кавычках потому, что тут есть нюансы связанные уже с распределением и организацией памяти в системе и конкретно в приложении, которые выходят за рамки темы)
А во втором случае будет адрес относительный (проще говоря - смещение), относительно адреса объекта класса. Чтобы получить через него значение нужен второй компонент - сам объект (или его адрес):
C++
1
std::cout << (obj.*pData) << std::endl;
Адреса методов могут быть взяты только вторым способом.
Но вряд ли вы такое проходили
2
Аммурка
4 / 4 / 0
Регистрация: 10.02.2014
Сообщений: 30
23.02.2014, 01:22  [ТС] #15
ссылки(&) и указатели(*) что-ли?
0
23.02.2014, 01:22
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
23.02.2014, 01:22
Привет! Вот еще темы с ответами:

В чем отличие алгоритмов set_union и merge? - C++
Всем привет! Уважаемые форумчане, подскажите пожалуйста, в чем отличие алгоритмов set_union и merge? Выходная последовательность обоих...

В чем отличие и что лучше изучать??? - C++
Вот есть язык программирования C, есть C++, есть C#, есть 1С. Так вот какой из них лучше учить

C++, в чем отличие операций добавления в программе - C++
Всем привет, в программировании новичок, помогите ответить на вопрос, в чем отличие добавлений элементов в каждом задании.. Т.е. сказать в...

В чем отличие ссылочных переменных от указателей? - C++
Всем привет. Вопрос в теме, чем отличаются int a=5; int &amp;p=a; от int a=5; int *p=&amp;a; Кроме того, что ссылочная переменная...


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

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

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