Другие языки программирования и технологии
Что значит стрелка ->(состоящая из знаков минус и больше) в с++ ?
При помощи этой стрелки осуществляется доступ к методам (в C++ -функциям) класса. Например Form1 -> Close(). Здесь Form1 - переменная класса, а Close() - метод класса.
Стрелка используется для доступа к полям через указатель на структуру или объект.
Способ доступа к методам и членам класса. Есть два способа доступа: точка и стрелка. Точка используется, когда члены класса и методы статические. А стрелка, вроде бы, когда осуществляется доступ через указатель. Точнее не знаю, видел где-то инфу.
Суслов, гонишь! Доступ к статическим переменным и функциям (а не к статическим членам и методам) через двоеточие.
Доступ к переменным членам и методам : через точку объект класса, через -> указатель на объект класса
class foo
{
public:
int m_val; // переменная-член
static int s_val; // статическая переменная класса, а не переменная-член
int func1(); // функция-член, или метод класса
static int func2(); // статическая функция, а не функция-член и не метод класса
};
статические
foo::s_val;
foo::func2();
// объект класса
foo obj;
obj.m_val;
obj.func1();
// указатель на объект класса
foo *pobj = &obj;
pobj->m_val;
pobj->func1();
Доступ к переменным членам и методам : через точку объект класса, через -> указатель на объект класса
class foo
{
public:
int m_val; // переменная-член
static int s_val; // статическая переменная класса, а не переменная-член
int func1(); // функция-член, или метод класса
static int func2(); // статическая функция, а не функция-член и не метод класса
};
статические
foo::s_val;
foo::func2();
// объект класса
foo obj;
obj.m_val;
obj.func1();
// указатель на объект класса
foo *pobj = &obj;
pobj->m_val;
pobj->func1();
это оператор косвенного обращения.
для указателей a->b - это (*a).b, просто сокращённая форма два-в-одном.
struct Point
{
int X, Y;
}
Point * point = new Point;
point->X = 1;
point->Y = 2;
(*point).X = 3;
но если копнуть глубже, то оператор косвенного обращения не синонимичен разыменованию указателя с последующим доступом к члену объекта, расположенного по этому указателю, потому что оператор -> можно перегружать (можно заставить его и жёсткий диск отформатировать) , в отличие от оператора "точка" - этот не перегружается.
для указателей a->b - это (*a).b, просто сокращённая форма два-в-одном.
struct Point
{
int X, Y;
}
Point * point = new Point;
point->X = 1;
point->Y = 2;
(*point).X = 3;
но если копнуть глубже, то оператор косвенного обращения не синонимичен разыменованию указателя с последующим доступом к члену объекта, расположенного по этому указателю, потому что оператор -> можно перегружать (можно заставить его и жёсткий диск отформатировать) , в отличие от оператора "точка" - этот не перегружается.
Олег Паньков
Спасибо. А что значит перегружать?
Похожие вопросы
- как определить сколько минут осталось до совпадения минутной и часовой стрелок.
- <<<<<<<<<<<<html>>>>>>>>>>>>...
- Программисты помогите>>>
- Mozila: HTML+CSS <col> не работает. В чем проблема?
- Помогите с задачей, пожалуйста! (Delphi) Дана строка символов, состоящая из букв, цифр, запятых, точек, знаков "+" и "-
- Какие знаки принято использовать в блок-схемах? Обязательно ненормальные := и даже <>?
- Есть ли возможность решать примеры, ответы которых будут состоять из миллиардов знаков.
- PHP foreach($this->arFields as $name=>$structure)
- Вычислить произведение n>=2 (n четное) сомножителей y=(2/1)*(2/3)*(4/3)*(4/5)*(6/5)*(6/7)*..
- Хочу стать программистом! Пожалуйста, ответьте на несколько вопросов (см. внутри-->>>>>>>
Доступ к переменным членам и методам : через точку объект класса, через -> указатель на объект класса
class foo
{
public:
int m_val; // переменная-член
static int s_val; // статическая переменная класса, а не переменная-член
int func1(); // функция-член, или метод класса
static int func2(); // статическая функция, а не функция-член и не метод класса
};
статические
foo::s_val;
foo::func2();
// объект класса
foo obj;
obj.m_val;
obj.func1();
// указатель на объект класса
foo *pobj = &obj;
pobj->m_val;
pobj->func1();