• 🔥 Бесплатный курс от Академии Кодебай: «Анализ защищенности веб-приложений»

    🛡 Научитесь находить и использовать уязвимости веб-приложений.
    🧠 Изучите SQLi, XSS, CSRF, IDOR и другие типовые атаки на практике.
    🧪 Погрузитесь в реальные лаборатории и взломайте свой первый сайт!
    🚀 Подходит новичкам — никаких сложных предварительных знаний не требуется.

    Доступ открыт прямо сейчас Записаться бесплатно

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

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

Взломай свой первый сервер и прокачай скилл — Начни игру на HackerLab