Рубрики

Оператор разрешения области действия против этого указателя в C ++?

Рассмотрим ниже программу C ++:

// C ++ программа, чтобы показать, что локальные параметры скрывают
// члены класса
#include<iostream>

using namespace std;

class Test

{

    int a;

public:

    Test() { a = 1; }

  

    // Локальный параметр 'a' скрывает члена класса 'a'

    void func(int a)  { cout << a; }

};

  

int main()

{

    Test obj;

    int k = 3 ;

    obj.func(k);

    return 0;

}

Выход:

3

Выходные данные для вышеуказанной программы равны 3, поскольку «a», передаваемый в качестве аргумента «func», скрывает «a» класса .ie 1
Тогда как вывести класс «а». Вот где этот указатель пригодится. Оператор типа «cout <a» вместо «cout << a» может просто вывести значение 1, так как этот указатель указывает на объект, из которого вызывается func.

// C ++ программа, чтобы показать использование этого для доступа к члену, когда
// есть локальная переменная с таким же именем.
#include<iostream>

using namespace std;

class Test

{

    int a;

public:

    Test() { a = 1; }

  

    // Локальный параметр 'a' скрывает член объекта

    // 'a', но мы можем получить к нему доступ, используя это.

    void func(int a)  { cout << this->a; }

};

  

int main()

{

    Test obj;

    int k = 3 ;

    obj.func(k);

    return 0;

}

Выход:

1

Как насчет оператора разрешения области ? Мы не можем использовать оператор разрешения области действия в вышеприведенном примере для печати члена объекта «a», поскольку оператор разрешения области действия может использоваться только для статического члена данных (или членов класса). Если мы используем оператор разрешения области видимости в приведенной выше программе, мы получаем ошибку компилятора, и если мы используем этот указатель в приведенной ниже программе, то также мы получаем ошибку компилятора.

// C ++ программа, показывающая, что :: может использоваться для доступа к статическому
// члены, когда есть локальная переменная с тем же именем
#include<iostream>

using namespace std;

  

class Test

{

    static int a;  // СТАТИЧЕСКОЕ СЕЙЧАС

public:

  

    // Локальный параметр 'a' скрывает члена класса

    // 'a', но мы можем получить к нему доступ, используя ::

    void func(int a)  { cout << Test::a; }

};

  
// В C ++ статические члены должны быть явно определены
// как это

int Test::a = 1;

  

int main()

{

    Test obj;

    int k = 3 ;

    obj.func(k);

    return 0;

}

Выход:

1


Вывод: оператор разрешения области действия предназначен для доступа к статическим членам или членам класса, и этот указатель предназначен для доступа к членам объекта, когда существует локальная переменная с таким же именем.

Эта статья предоставлена Аакашем Сачдевой . Если вам нравится GeeksforGeeks и вы хотите внести свой вклад, вы также можете написать статью и отправить ее по почте на contrib@geeksforgeeks.org. Смотрите свою статью, появляющуюся на главной странице GeeksforGeeks, и помогите другим вундеркиндам.

Пожалуйста, напишите комментарии, если вы обнаружите что-то неправильное, или вы хотите поделиться дополнительной информацией по обсуждаемой теме

Рекомендуемые посты:

Оператор разрешения области действия против этого указателя в C ++?

0.00 (0%) 0 votes