this в c



This в c

Автор ~WiZaRd задал вопрос в разделе Другие языки и технологии

В чем смысл указателя this в С++ ? и получил лучший ответ

Ответ от Vladimir[гуру]
Что такое this? Попробую ответить простым языком.
Допустим имеется некий метод в неком классе. При вызове этого метода ему передается автоматически неявно заданный аргумент, который представляет собой ссылку на вызывающий объект. Эта ссылка и называется ключевым словом this. В большинстве случаев программисты им не пользуются. Но из this можно иногда извлечь пользу. Например, синтаксис С# допускает, чтобы имя параметра или локальной переменной совпадало с именем переменной экземпляра. В этом случае локальное имя будет скрывать переменную экземпляра. И тогда доступ к скрытой переменной экземпляра можно получить с помощью ссылки this. Например, следующий фрагмент кода (хотя его стиль написания не рекомендуется к применению) представляет собой синтаксически допустимый способ определения конструктора в классе:
public Rect(int width, int height)
{
this.width = width;
this.height = height;
}
В этой версии конструктора имена параметров совпадают с именами переменных экземпляра, в результате чего за первыми скрываются вторые, а ключевое слово this как раз и используется для доступа к скрытым переменным экземпляра.
Различие между static— и обычным методом состоит в том, что static-метод можно вызвать посредством имени класса, без необходимости создания объекта этого класса. 1
// Использование модификатора типа static.
using System;
class StaticDemo
{
// Объявление статической переменной
public static int val = 100;
// Объявление статического метода
public static int valDiv2()
{
return val/2;
}
}
class SDemo
{
public static void Main()
{
Console.WriteLine("Начальное значение переменной StaticDemo.val равно " + StaticDemo.val);
StaticDemo.val = 8;
Console.WriteLine("Значение переменной StaticDemo.val равно " + StaticDemo.val);
Console.WriteLine("StaticDemo.valDiv2(): " + StaticDemo.valDiv2());
}
}
При выполнении эта программа генерирует следующие результаты:
Начальное значение переменной StaticDemo.val равно 100
Значение переменной StaticDemo.val равно 8
StaticDemo.valDiv2 (): 4
Как видно по результатам выполнения программы, static-переменная инициализируется в начале ее работы, т. е. еще до создания объекта класса, в котором она определяется.
На static-методы накладывается ряд ограничений:
static-метод не имеет ссылки this
static-метод может напрямую вызывать только другие static-методы. Он не может напрямую вызывать метод экземпляра своего класса. Дело в том, что методы экземпляров работают с конкретными экземплярами класса, чего не скажешь о static-методах.
static-метод должен получать прямой доступ только к static-данным. Он не может напрямую использовать переменные экземпляров, поскольку не работает с экземплярами класса.
Надеюсь понятно?

Ответ от Андрей Чигишев[активный]
Это больше относится не столько к C, сколько к библиотеке (MFC например) - указывает на текущий объект, чтоб не заморачиваться с указанием имени объекта, если пользуешься его методом.
т. е. если вызываешь функцию другого задействованного объекта например pups из функции (метода ) объекта dubs, то прописываешь
pups.methodpupsa() а вместо dubs.methoddubsa() - пишешь this.methoddubsa()
ну или this->methoddubsa()

Ответ от Modern Иванов[гуру]
Каждый объект в памяти имеет реальный адрес. При вызове метода из объекта, этот метод обрабатывает данные объекта. Но так как метод-это обычная ф-ция, она должна получить обрабатываемые данные в качестве параметров. А значит методу нужно передать адрес самого объекта, чтоб знать, откуда выбирать значения обрабатываемых переменных.
Схематично примерно так:
class Myclass
{
int a;
int b;
public:
Myclass(int _a,int _b):a(_a),b(_b) {}
int Summ() //int Summ(Myclass & o)-это без this
{
return a+b;
}
};
int main()
{
Myclass ob(5,10);
ob.Summ(); //ob.Summ(&ob)-это без this
return o;
}
В комментах я показал как было бы, еслиб не было this.Каждый раз приходилось бы в параметрах передавать в методы адрес самого объекта. Но разработчики языка решили, зачем каждый раз писать одно и тоже в коде и придумали this,который обязательно не явно каждый раз передаётся в качестве первого параметра нестатическому методу класса.

Ответ от 3 ответа[гуру]
Привет! Вот подборка тем с ответами на Ваш вопрос: В чем смысл указателя this в С++ ?

Ещё тупой вопрос по C++ 🙂
#include <iostream>

using namespace std;

void main()
{
int
подробнее...

У меня в Adobe Photoshop CS4 выходит окошко Licensing for this product has expired что делать?
ИНСТРУКЦИЯ:
1. Отключитесь от интернета!! ! Проверьте, чтобы наверняка.
Начиная с 4
подробнее...
спросили в Интернет Inferno
как попасть в контакт?
1. В 99% случаев блокирование доступа к сайтам вызывается вирусом, который изменяет файл hosts, что
подробнее...
спросили в Доступнее
что такое конструктор в java. доступным языком
Метод класса который вызывается автоматически при создании объекта этого класса. Используется для
подробнее...
Ответ от 3 ответа[гуру]
Привет! Вот еще темы с похожими вопросами:

программно создать объект в C#
private void button1_Click(object sender, System.EventArgs e)
{
// Create an instance of
подробнее...
спросили в Интернет Microsoft lumia
проблемы с контактом
1. Ищем файл hosts на компьютере
Либо встроенным поиском в Windows, либо по следующим адресам:
подробнее...
спросили в Space Quest
Как удалить вирус?
с/sistem/windows/sistem32/drivers/etc/hosts это путь к папке hosts откройте блокнотом если вы туда
подробнее...

Работа с битами в C#
using System;

static class Program {
// возвращает значение бита b (0 или 1) числа n

подробнее...

Как в C# сделать управляемый ползунок
У scrollbar есть событие Scroll, в нем можно:
textBox1.Text =
подробнее...
Операторы в C и C++ на Википедии
Посмотрите статью на википедии про Операторы в C и C++
 

Ответить на вопрос:

Имя*

E-mail:*

Текст ответа:*
Проверочный код(введите 22):*