• Курсы Академии Кодебай, стартующие в мае - июне, от команды The Codeby

    1. Цифровая криминалистика и реагирование на инциденты
    2. ОС Linux (DFIR) Старт: 16 мая
    3. Анализ фишинговых атак Старт: 16 мая Устройства для тестирования на проникновение Старт: 16 мая

    Скидки до 10%

    Полный список ближайших курсов ...

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

  • Автор темы rtprls
  • Дата начала
R

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()
 
L

lazybiz

а в функции перегрузки оператора обратится к закрытой переменной таким образом я уже не могу
А почему ты не можешь? Я могу.
C++:
Counter Counter :: operator -(const Counter & rhs)
{
return Counter(itsVal-rhs.itsVal);
}
 
Мы в соцсетях:

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