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

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

Войти
Регистрация
Восстановить пароль
 
 
Игорюня
20 / 16 / 7
Регистрация: 07.12.2013
Сообщений: 244
#1

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

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

Привет,форумчане.
Изучаю с++ по Либерти.
Дошёл до классов,точнее до методов доступа.
Написал код:
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
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
31.12.2013, 07:40
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Методы доступа. Как именно метод привязывается к определённой переменной (C++):

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

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

Методы доступа к данным Get и Set - C++
Доброе время суток! Мне нужна информация по Get та Set, а точнее по методам доступа. Начал гуглить, но ничего нормального не нашел. ...

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

Удаление именно той корневой папки, в определённой подпапке которой отсутствует заданный файл - CMD/BAT
Здравствуйте, есть вот такой батник: @ECHO on CD\ E: CD Advanced\AdvancedApkTool\3-Out for /f "tokens=*" %%i in ('dir /b /ad...

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

18
rrrFer
Заблокирован
31.12.2013, 07:56 #2
Цитата Сообщение от Игорюня Посмотреть сообщение
Я не совсем понял,как именно метод привязывается к определённой переменной
Видимо, руками "привязать". Никто за тебя это не сделает
C++
1
void Car::SetSpeed(int val) { Speed = val; }
Почему он int возвращает - не понятно. Если это SetSpeed - то он должен устанавливать значение (может возвращать код ошибки, наверное, но есть более гуманные средства для этого). Если это GetSpeed - возвращать значение.
1
Игорюня
20 / 16 / 7
Регистрация: 07.12.2013
Сообщений: 244
31.12.2013, 08:58  [ТС] #3
Так приставки get и set имеют значение?Или это просто рандомное имя метода?
0
Firework
64 / 88 / 23
Регистрация: 01.04.2013
Сообщений: 601
31.12.2013, 09:01 #4
Цитата Сообщение от Игорюня Посмотреть сообщение
Так приставки get и set имеют значение?Или это просто рандомное имя метода?
Можешь назвать как угодно, работать будет также.
Вопрос в том, поймут ли тебя...
1
Игорюня
20 / 16 / 7
Регистрация: 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
zss
Модератор
Эксперт С++
6537 / 6099 / 2009
Регистрация: 18.12.2011
Сообщений: 15,870
Завершенные тесты: 1
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 / 7
Регистрация: 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
alsav22
5426 / 4821 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
31.12.2013, 13:12 #8
Цитата Сообщение от Игорюня Посмотреть сообщение
компилятор выдаёт ошибку о неразрешённом внешнем элементе
Реализаций методов нет, вот и выдаёт.

Добавлено через 4 минуты
И где там в книге такой код? Это же начало, объвление класса. Дальше почитайте, там и реализация методов будет, и код с main().
1
Tulosba
:)
Эксперт С++
4397 / 3233 / 297
Регистрация: 19.02.2013
Сообщений: 9,045
31.12.2013, 13:15 #9
Цитата Сообщение от Игорюня Посмотреть сообщение
Судя учебнику,такая конструкция верна,
Верна, но недостаточна. alsav22 уже сказал в чем дело. От себя хочу добавить, что имена функций могут быть какие угодно (учитывая разумные ограничения), что будет делать та или иная функция решает программист. Однако название давать надо говорящее и не противоречивое.
Цитата Сообщение от rrrFer Посмотреть сообщение
Почему он int возвращает - не понятно.
Ну, можно возвращать например прежнее значение.
get-методы хорошо бы сделать константными. Но это уже другая история
1
Игорюня
20 / 16 / 7
Регистрация: 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
yogurt
62 / 62 / 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
Tulosba
:)
Эксперт С++
4397 / 3233 / 297
Регистрация: 19.02.2013
Сообщений: 9,045
31.12.2013, 14:02 #12
Цитата Сообщение от Игорюня Посмотреть сообщение
Вы определяете по названию метода и переменной?
С какой переменной будет связан (и будет ли вообще) метод определяет программист. Как напишите, так и будет.
Никакой связи на уровне языка между именем метода и тем что он будет делать нет.
Цитата Сообщение от Игорюня Посмотреть сообщение
понять,как методы привязываются к переменным.
Автоматически никак. Нужно написать ручками код (реализацию метода), который обозначит эту связь.
Читайте теорию про объявление и определение функций и переменных.
1
Arkaniy
106 / 106 / 6
Регистрация: 29.08.2012
Сообщений: 453
31.12.2013, 14:08 #13
В этом куске кода отсутствуют тела методов. Вот эти 4 строки - это просто объявления методов. Вот эта привязка, которая так мучает, находится в теле метода. Там всё видно, что чему присваевается или какое значение возвращается.
Названия же могут быть абсолютно любыми, но смысла в таких нету. Принято писать приставки get и set чтобы было сразу видно, что этот метод делает: возвращает какое-то значение или устанавливает. Но это только условности.
1
Игорюня
20 / 16 / 7
Регистрация: 07.12.2013
Сообщений: 244
31.12.2013, 14:31  [ТС] #14
Видима в книге представлена логическая привязка,а не синтаксическая.
0
Arkaniy
106 / 106 / 6
Регистрация: 29.08.2012
Сообщений: 453
31.12.2013, 15:14 #15
Видимо, там просто не написано тело метода.
1
31.12.2013, 15:14
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
31.12.2013, 15:14
Привет! Вот еще темы с ответами:

Ограничение доступа к определённой таблице - MS Access
Здравствуйте! Скажите, может кто знает, как ограничить доступ к определённой таблице?не ко всей базе, а именно к таблице?

Как именно в методах расширения указать, что переходить нужно именно главный контроллер? - C# MVC
В проекте есть несколько Areas. Маршрутизация нстроена так (для наглядности сократил) public class RouteConfig { ...

Как определить тип переменной, ссылающейся на определённый класс? Нужен именно тип, а не ссылка на обьект! - Java SE
interface HowDefineMyType { void info(); } class A implements HowDefineMyType { public int x;

Как в зависимости от ситуации присвоить переменной методы MoveFirst и MoveLast? - Visual Basic
Как в зависимости от ситуации присвоить переменной методы MoveFirst и MoveLast, чтобы использовать rs.MoveFirst или rs.MoveLast. Как...


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

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

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