• B правой части каждого сообщения есть стрелки и . Не стесняйтесь оценивать ответы. Чтобы автору вопроса закрыть свой тикет, надо выбрать лучший ответ. Просто нажмите значок в правой части сообщения.

  • 15 апреля стартует «Курс «SQL-injection Master» ©» от команды The Codeby

    За 3 месяца вы пройдете путь от начальных навыков работы с SQL-запросами к базам данных до продвинутых техник. Научитесь находить уязвимости связанные с базами данных, и внедрять произвольный SQL-код в уязвимые приложения.

    На последнюю неделю приходится экзамен, где нужно будет показать свои навыки, взломав ряд уязвимых учебных сайтов, и добыть флаги. Успешно сдавшие экзамен получат сертификат.

    Запись на курс до 25 апреля. Получить промодоступ ...

Передача параметров в функцию по ссылке, непонятны особенности работы

  • Автор темы proahead
  • Дата начала
P

proahead

Разбираясь в работе программы из книги Джесса Либерти «С++ за 21 день» у меня возник вопрос, с которым я хочу обратится к вам потому что, не могу понять один момент…

C++:
#include <cstdlib>
#include <iostream>
using namespace std;

class SimpleCat 
{
public:
SimpleCat();
SimpleCat(SimpleCat &);
~SimpleCat();

int GetAge() const { return itsAge; }
void SetAge(int age) { itsAge=age; }
private:
int itsAge;
};

SimpleCat :: SimpleCat()
{
cout<<"Simple Cat constructor \n";
itsAge=1;
}

SimpleCat :: SimpleCat( SimpleCat & )
{
cout<<"SimpleCat Copy Constructor \n";
}

SimpleCat :: ~SimpleCat()
{
cout<<"SimpleCat destructor \n";
}

const SimpleCat * const FunctionTwo(const SimpleCat * const theCat);


int main()
{

cout<<"Making a cat \n";
SimpleCat Frisky;
cout<<"Frisky is ";
cout<<Frisky.GetAge();
cout<<" years old\n";

int age=5;

Frisky.SetAge(age);
cout<<"Frisky is ";
cout<<Frisky.GetAge();
cout<<" years old\n";

cout<<"Calling Function Two\n";
FunctionTwo(&Frisky);
cout<<"Frisky is ";
cout<<Frisky.GetAge();
cout<<" years old\n";



system("PAUSE");
return EXIT_SUCCESS;
}


const SimpleCat * const FunctionTwo(const SimpleCat * const theCat)
{
cout<<"FunctionTwo Returning \n";
cout<<"Frisky is now "<<theCat->GetAge()<<" ";
cout<<" years old\n";
// theCat->SetAge(8);
return theCat;
}


Вопрос касается следующего момента.
Мы передаем адрес объекта Frisky [размещенного в стеке, а значит к его членам мы можем обращаться с помощью оператора доступа «.», т.е. Frisky.GetAge()] в функцию FunctionTwo, где для обращение к его членам мы уже используем оператор косвенного обращения «->» [Frisky->GetAge()], как если бы, объект был в области динамического объекта

Кто знает объясните пожалуйста
 
L

lazybiz

В отличие от оператора '.', оператор '->' используется для доступа к компоненту класса/структуры через указатель на класс/структуру.
 
Мы в соцсетях:

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