Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.71/7: Рейтинг темы: голосов - 7, средняя оценка - 4.71
20 / 16 / 11
Регистрация: 07.12.2013
Сообщений: 244
1

Методы доступа. Как именно метод привязывается к определённой переменной

31.12.2013, 07:40. Показов 1451. Ответов 18
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Привет,форумчане.
Изучаю с++ по Либерти.
Дошёл до классов,точнее до методов доступа.
Написал код:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
   Class Car
{
    public:
    int Setspeed(int speed);
    private:
    int speed;
};
   
    int main()
{
   Car Gas;
   Gas.Setspeed(5);
}
Если я правильно понял,то Setspeed-это метод,который обеспечивает доступ к переменной-члену speed.
Далее я хочу присвоить переменной speed значение "5" :Gas.Setspeed(5);.
Компилятор выдал ошибки:
1>first.obj : error LNK2019: ссылка на неразрешенный внешний символ "public: void __thiscall Car::Setspeed(int)" (?Setspeed@Car@@QAEXH@Z) в функции _main
1>C:\Users\PC\documents\visual studio 2010\Projects\first\Debug\first.exe : fatal error LNK1120: 1 неразрешенных внешних элементов

Я не совсем понял,как именно метод привязывается к определённой переменной,видимо в этом ошибка.Просьба расписать верный вариант.
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
31.12.2013, 07:40
Ответы с готовыми решениями:

Метод объекта не привязывается к объекту
Добрый день! Помогите со следующей проблемой. В примере рассматривается описание объекта и...

Как выполнять методы в определенной последовательности?
Здравствуйте. Подскажите, к примеру нужно сделать валидацию, и есть несколько правил в массиве...

Как проверить размер чаровской переменной именно в битах
Здравствуйте, уважаемые знатоки! Подскажите, пожалуйста, как проверить размер чаровской переменной...

Как работает метод Post, как именно он пересылает данные
Всем доброго времени суток. Прошу прощения если я опять ошибся разделом и уже задолбал весь форум...

18
Заблокирован
31.12.2013, 07:56 2
Цитата Сообщение от Игорюня Посмотреть сообщение
Я не совсем понял,как именно метод привязывается к определённой переменной
Видимо, руками "привязать". Никто за тебя это не сделает
C++
1
void Car::SetSpeed(int val) { Speed = val; }
Почему он int возвращает - не понятно. Если это SetSpeed - то он должен устанавливать значение (может возвращать код ошибки, наверное, но есть более гуманные средства для этого). Если это GetSpeed - возвращать значение.
1
20 / 16 / 11
Регистрация: 07.12.2013
Сообщений: 244
31.12.2013, 08:58  [ТС] 3
Так приставки get и set имеют значение?Или это просто рандомное имя метода?
0
102 / 93 / 36
Регистрация: 01.04.2013
Сообщений: 654
31.12.2013, 09:01 4
Цитата Сообщение от Игорюня Посмотреть сообщение
Так приставки get и set имеют значение?Или это просто рандомное имя метода?
Можешь назвать как угодно, работать будет также.
Вопрос в том, поймут ли тебя...
1
20 / 16 / 11
Регистрация: 07.12.2013
Сообщений: 244
31.12.2013, 10:34  [ТС] 5
Пример из учебника:

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
class Cat
{  
  public:
    int Getage();
    void Setage(int Age);
 
    int Getweight();
    void Setweight(int Weight);
    
  private:
    int itsAge;
    int itsWeight;
};
Далее идёт пояснение:

Этот класс имеет четыре открытых метода.Getage и Setage дают доступ к переменной itsAge.Getweight и Setweight дают доступ к переменной itsWeight.
Вопрос в том,каким образом методы привязаны к определённым переменным,исходя из этого примера.Почему Getage и Setage привязаны именно к itsAge,а не к itsWeight.Я не понимаю принципа из этого примера. Разъяните идиоту.
0
Модератор
Эксперт С++
13507 / 10757 / 6412
Регистрация: 18.12.2011
Сообщений: 28,712
31.12.2013, 11:01 6
Цитата Сообщение от Игорюня Посмотреть сообщение
каким образом методы привязаны к определённым переменным
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
class Cat
{  
  public:
    int Getage(){return itsAge;}// возвращает значение  itsAge
    void Setage(int Age)( itsAge=Age;} // устанавливает значение  itsAge
 
    int Getweight(){return itsWeight;}// возвращает значение itsWeight
    void Setweight(int Weight)( itsWeight=Weight;} // устанавливает значение  itsWeight
    
  private:
    int itsAge;
    int itsWeight;
};
Теперь должно быть понятно, что привязаны только потому, что так написано в коде.
1
20 / 16 / 11
Регистрация: 07.12.2013
Сообщений: 244
31.12.2013, 13:03  [ТС] 7
Цитата Сообщение от zss Посмотреть сообщение

Теперь должно быть понятно, что привязаны только потому, что так написано в коде.
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
#include <iostream>
using namespace std;
 
class Car
{
public:
    int Getspeed();
    void Setspeed(int Speed);
private:
    int itsSpeed;
};
int main()
{   
    Car gas;
    gas.Setspeed(5);
}
Судя учебнику,такая конструкция верна,но компилятор выдаёт ошибку о неразрешённом внешнем элементе.
То ли я такой тупой,то ли...
0
5498 / 4893 / 831
Регистрация: 04.06.2011
Сообщений: 13,587
31.12.2013, 13:12 8
Цитата Сообщение от Игорюня Посмотреть сообщение
компилятор выдаёт ошибку о неразрешённом внешнем элементе
Реализаций методов нет, вот и выдаёт.

Добавлено через 4 минуты
И где там в книге такой код? Это же начало, объвление класса. Дальше почитайте, там и реализация методов будет, и код с main().
1
:)
Эксперт С++
4773 / 3267 / 497
Регистрация: 19.02.2013
Сообщений: 9,046
31.12.2013, 13:15 9
Цитата Сообщение от Игорюня Посмотреть сообщение
Судя учебнику,такая конструкция верна,
Верна, но недостаточна. alsav22 уже сказал в чем дело. От себя хочу добавить, что имена функций могут быть какие угодно (учитывая разумные ограничения), что будет делать та или иная функция решает программист. Однако название давать надо говорящее и не противоречивое.
Цитата Сообщение от rrrFer Посмотреть сообщение
Почему он int возвращает - не понятно.
Ну, можно возвращать например прежнее значение.
get-методы хорошо бы сделать константными. Но это уже другая история
1
20 / 16 / 11
Регистрация: 07.12.2013
Сообщений: 244
31.12.2013, 13:50  [ТС] 10
Люди,тема создавалась,чтобы я понял как метод привязывается к переменной.
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
class Cat
{  
  public:
    int Getage();
    void Setage(int Age);
 
    int Getweight();
    void Setweight(int Weight);
    
  private:
    int itsAge;
    int itsWeight;
};
Getage и Setage отвечают за переменную itsAge,а Getweight и Setweight за переменную itsWeight.
Как вы сами бы определили,что Getage отвечает именно за itsAge,а не за itsWeight!!! Вы определяете по названию метода и переменной?Или как?Объясните мне,как вы это определили!!!Я для этого тему и создал,чтобы понять,как методы привязываются к переменным.Наверное такая элементарщина,но уже несколько дней не могу понять.
0
73 / 73 / 1
Регистрация: 02.08.2008
Сообщений: 107
31.12.2013, 13:59 11
Getage, Setage . . . itsAge

Getweight, Setweight . . . itsWeight

В Вашем коде Getage и Setage не отвечают за переменную itsAge, а Getweight и Setweight не отвечают за переменную itsWeight. У них на данном этапе просто имена похожи.
В Вашем коде ничего ни к чему не привязано. Методы в нём не реализованы. Смотрите пост zss. У него уже всё привязано и видно, что за что отвечает.
1
:)
Эксперт С++
4773 / 3267 / 497
Регистрация: 19.02.2013
Сообщений: 9,046
31.12.2013, 14:02 12
Цитата Сообщение от Игорюня Посмотреть сообщение
Вы определяете по названию метода и переменной?
С какой переменной будет связан (и будет ли вообще) метод определяет программист. Как напишите, так и будет.
Никакой связи на уровне языка между именем метода и тем что он будет делать нет.
Цитата Сообщение от Игорюня Посмотреть сообщение
понять,как методы привязываются к переменным.
Автоматически никак. Нужно написать ручками код (реализацию метода), который обозначит эту связь.
Читайте теорию про объявление и определение функций и переменных.
1
107 / 107 / 21
Регистрация: 29.08.2012
Сообщений: 453
31.12.2013, 14:08 13
В этом куске кода отсутствуют тела методов. Вот эти 4 строки - это просто объявления методов. Вот эта привязка, которая так мучает, находится в теле метода. Там всё видно, что чему присваевается или какое значение возвращается.
Названия же могут быть абсолютно любыми, но смысла в таких нету. Принято писать приставки get и set чтобы было сразу видно, что этот метод делает: возвращает какое-то значение или устанавливает. Но это только условности.
1
20 / 16 / 11
Регистрация: 07.12.2013
Сообщений: 244
31.12.2013, 14:31  [ТС] 14
Видима в книге представлена логическая привязка,а не синтаксическая.
0
107 / 107 / 21
Регистрация: 29.08.2012
Сообщений: 453
31.12.2013, 15:14 15
Видимо, там просто не написано тело метода.
1
5498 / 4893 / 831
Регистрация: 04.06.2011
Сообщений: 13,587
31.12.2013, 17:58 16
Цитата Сообщение от Arkaniy Посмотреть сообщение
Видимо, там просто не написано тело метода.
Всё там написано, только нужно ещё две страницы прочитать.
Цитата Сообщение от alsav22 Посмотреть сообщение
Это же начало, объвление класса. Дальше почитайте, там и реализация методов будет, и код с main().
1
:)
Эксперт С++
4773 / 3267 / 497
Регистрация: 19.02.2013
Сообщений: 9,046
31.12.2013, 20:40 17
Цитата Сообщение от alsav22 Посмотреть сообщение
Всё там написано, только нужно ещё две страницы прочитать.
Это, видимо, уже в следующем году случится
1
Jupiter
01.01.2014, 17:04
  #18

Не по теме:

Цитата Сообщение от Игорюня Посмотреть сообщение
Изучаю с++ по Либерти
сразу видно м-ученика

1
20 / 16 / 11
Регистрация: 07.12.2013
Сообщений: 244
02.01.2014, 07:40  [ТС] 19
Всем спасибо,нужно было действительно прочитать пару страниц,а не пудрить вам мозги...
0
02.01.2014, 07:40
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
02.01.2014, 07:40
Помогаю со студенческими работами здесь

Методы доступа - как это работает?
Здравствуйте, я изучаю С++ по книге Джесс Либерти: Освой самостоятельно C++ за 21 день. Мой вопрос,...

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

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

Как сделать чтение определенной переменной из бинарного файла
как сделать чтение определенной переменной из бинарного файла public void Load() { ...


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

Или воспользуйтесь поиском по форуму:
19
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru