Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.94/33: Рейтинг темы: голосов - 33, средняя оценка - 4.94
72 / 71 / 8
Регистрация: 04.08.2010
Сообщений: 432
1

Что такое This и с чем его едят

27.09.2010, 18:42. Показов 6504. Ответов 7
Метки нет (Все метки)

Доброго дня/ночи
Вот пытаюсь выкурить мануалы по теме "this". Прочитал надцать листов литературы, но так особо не могу понять - this возвращает только адрес обьекта, в котором он содержится?
вот пример, над которым я сижу
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
#include<iostream>
using namespace std;
class ClassTMP
{
private:
    int data;
public:
    ClassTMP():data(){};
    ClassTMP(int a):data(a){};
    ClassTMP(ClassTMP& a)
    {
        data=a.data;
        cout << "Вызван перегруженый конструктор копирования\n";
    }
    ClassTMP& operator=(ClassTMP& a)
    {
        data=a.data;
        cout << "Вывзван перегруженый оператор присваивания\n";
        return *this;
    }
    void operator=(int a)
    {
        data=a;
        cout << "Вывзван перегруженый оператор присваивания цифpы\n";
    }
    void print()
    {
        cout << data << endl;
    }
    void input(int a)
    {
        data=a;
    }
};
int main()
{
    setlocale(LC_ALL,"Russian");
    ClassTMP a;
    ClassTMP b;
    
    a=5;
    b=a;
    a.print();
    //b.print();
    return EXIT_SUCCESS;
}
Если кто может, расскажите немного подробнее своими словами об сием чуде природы
0

Помощь в написании контрольных, курсовых и дипломных работ здесь.

Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
27.09.2010, 18:42
Ответы с готовыми решениями:

что такое Qt, и с чем его едят?
Здравствуйте, я бы хотел узнать что такое Qt, и как на нем программировать, я слышал что это...

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

Что такое assoc и с чем его едят?
Объясните, пожаалуйста)

Модуль: что такое и с чем его едят?
есть задание: что есть модуль, как он создается и как подключается? предполагаю, что это...

7
Эксперт С++
1667 / 1039 / 174
Регистрация: 27.09.2009
Сообщений: 1,945
27.09.2010, 19:20 2
this - неявный параметр в методах. При вызове метода на каком-то объекте адрес этого объекта неявно передаётся в функцию, чтобы можно было ссылаться на этот самый объект. Прямое обращение к членам класса - это просто более удобный способ не писать this-> по всему тексту. Простейший пример:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
class MyClass{
public:
    void Foo() {a = 0;}
    void Bar() const {std::cout << a;}
private:
    int a;
};
 
void SomeFunc()
{
    MyClass c;
    c.Foo();
    c.Bar();
}
аналогичен такой записи:

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
struct MyClass{
    int a;
};
 
void MyClass_Foo(MyClass * const This)
{
    This->a = 0;
}
 
void MyClass_Bar(const MyClass * const This)
{
    std::cout << This->a;
}
 
void SomeFunc()
{
    MyClass c;
    MyClass_Foo(&c);
    MyClass_Bar(&c);
}
1
33 / 33 / 2
Регистрация: 24.09.2010
Сообщений: 140
27.09.2010, 21:54 3
Чтоб понять для чего нужен this, посмотри на функции с this в дизассемблере. Например при создании объекта ClassTMP, выделится 4 байта памяти для переменной data, адрес по которому находится эта переменная это и есть this. При вызове не статичной функции, в неё передаётся этот адрес, чтоб когда ты например делаешь this->data = 5; компилятор мог сформировать инструкцию вида mov dword ptr[this + 0], 5, а в не статичные функции this не передаётся, поэтому и получить доступ к data через this ты не сможешь.

Добавлено через 1 час 10 минут
в статичные функции this не передаётся. (опечатка)
1
Day
1174 / 984 / 83
Регистрация: 29.10.2009
Сообщений: 1,386
27.09.2010, 22:07 4
LineStown, Dвсе в самом деле просто.
Если б мы писали на Си, то
C
1
2
3
4
5
6
7
8
9
10
11
 
typedef struct { ... } S;
main()
{
S A;
func(&A, ...);
}
func(S *A, ...)
{
   A->... = ...
}
А на С++ в вызове func A присутствует неявно
C++
1
2
3
4
5
6
7
8
9
10
class S { ... };
main()
{
S A;
A.func( ...);
}
S::func(...)
{
   this->... = ...
}
Т.е. здесь в func в качестве параметра передается еще и ссылка на объект A, только в тексте этого не видно.
А внутри func этому невидному параметру есть сакраменттальный синоним [b]this[/] (этот)

Добавлено через 1 минуту
И мануалов никаких не нужно...
2
72 / 71 / 8
Регистрация: 04.08.2010
Сообщений: 432
28.09.2010, 11:50  [ТС] 5
Цитата Сообщение от Nwq Посмотреть сообщение
Например при создании объекта ClassTMP, выделится 4 байта памяти для переменной data, адрес по которому находится эта переменная это и есть
Гм вот тут интересно, я думал this содержит адрес обьекта (класса), а не адрес переменной в классе (хотя, если переменная одна, то адрес класса совпадает с адресом переменной)
0
33 / 33 / 2
Регистрация: 24.09.2010
Сообщений: 140
28.09.2010, 12:30 6
Да, так и есть, я просто хотел чтоб ты понял что есть 'адрес объекта' и что по нему находится.
0
72 / 71 / 8
Регистрация: 04.08.2010
Сообщений: 432
28.09.2010, 12:33  [ТС] 7
Цитата Сообщение от Nwq Посмотреть сообщение
Да, так и есть, я просто хотел чтоб ты понял что есть 'адрес объекта' и что по нему находится.
Угумс, понятно что ничего интересного нету в this В принципе понятно, где и зачем его использывать....
Спс всем
0
4200 / 1792 / 211
Регистрация: 24.11.2009
Сообщений: 27,563
28.09.2010, 12:56 8
Зыс - это неявный указатель на тот объект, который прописан через точку слева от каждого данного метода или на левый операнд каждого данного оператора. Используется в тех случаях, когда внутри метода, конструктора, или оператора локальными данными, операндами или параметрами перекрыты члены класса. Тогда без зыса локал, а с ним член. Иного применения придумать не могу.

Добавлено через 4 минуты
Явно писать зыс без перекрытия - это не применение, так как перед любым обращением к члену всё равно неявно ставится
C++
1
this->
.
1
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
28.09.2010, 12:56

Что такое Класс, и с чем его едят?
собственно это я бы и хотел знать. попытался воспринять самостоятельно - не получилось. прошу,...

Объясните что такое массив объединений и с чем его едят
Написать программу удаления заданного числового значения из массива объединений. Объясните что...

Класс-контейнер? Что это такое и с чем его «едят»?
Вечер добрый, столкнулся со следующей проблемой, в общем, есть задание: Создать класс-контейнер,...

Нюансы использования оператора запятая или что такое UB и с чем его едят
Почему студия и ideone выдают разные значения для a и b? в студии выходит a = 10 , b = 10 в...


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

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

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