1. Наш канал codeby в telegram. Пишем об информационной безопасности, методах защиты информации, о программировании. Не пропускай новости с кодебай, будь в тренде ! Подробнее ...

    Скрыть объявление

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

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

  1. rtprls

    rtprls Гость

    Репутация:
    0
    Здравствуйте

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

    Код:
    #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

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

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