1. Акция на весь декабрь! Получай оплату х2 за уникальные статьи, объемом от 200 слов, если в заголовке темы и теле статьи присутствует слово Python
    Скрыть объявление

Доступ К Закрытым Членам Класса

Тема в разделе "Общие вопросы по С и С++", создана пользователем rtprls, 21 дек 2011.

  1. rtprls

    rtprls Гость

    Здравствуйте

    Есть вот такая программа.

    Код (C++):
    #include <cstdlib>
    #include <iostream>
    using namespace std;

    class Counter {
    public:
    Counter();
    Counter(int val) { itsVal=val;}
    Counter (const Counter & rhs);
    ~Counter(){}
    int GetItsVal() const {return itsVal;}
    void SetItsVal(int x) {itsVal=x;}
    Counter operator -(const Counter &);

    private:
    int itsVal;
    };

    Counter :: Counter():
    itsVal(0)
    {}

    Counter Counter :: operator -(const Counter & rhs)
    {
    return Counter(itsVal-rhs.GetItsVal());
    }


    Counter :: Counter (const Counter & rhs1)
    {
    itsVal=rhs1.itsVal;
    }

    int main()
    {
    Counter varOne(2), varTwo(4), varThree;
    varThree=varTwo-varOne;
    cout<<"varThree.GetItsVal() "<<varThree.GetItsVal()<<"\n";

    Counter varFive(varOne);
    cout<<"varFive.GetItsVal() "<<varFive.GetItsVal()<<"\n";

    system("pause");
    return 0;
    }


    Можете объяснить, почему в конструкторе копировщике ссылка rhs1 имеет доступ к закрытому члену класса itsVal, а в функции перегрузки оператора обратится к закрытой переменной таким образом я уже не могу, а должен использовать rhs.GetItsVal()
     
  2. lazybiz

    lazybiz Well-Known Member
    C\C++ Team

    Регистрация:
    3 ноя 2010
    Сообщения:
    1.344
    Симпатии:
    0
    А почему ты не можешь? Я могу.
    Код (C++):
    Counter Counter :: operator -(const Counter & rhs)
    {
    return Counter(itsVal-rhs.itsVal);
    }
     
Загрузка...

Поделиться этой страницей