Невозможно понять эту концепцию обработчиков в переполнении стека

Я проходил через кусок кода, когда натолкнулся на что-то новое. Однако я попытался написать свой собственный код для лучшего понимания.

#include<iostream>

using namespace std;

class material
{
public:
material()
{
cout<<"material() called"<<endl;
}

bool test_func()
{
cout<<"Hello World"<<endl;

return true;
}
};

class server
{
private:
material *mat;

public:
server()
{
cout<<"server() called"<<endl;
}
material *matrl()
{
return mat;
}
};

class Handler
{
public:
Handler()
{
cout<<"Handler() called"<<endl;
}

server svr;

bool demo()
{
bool ret;
ret=svr.matrl()->test_func();

return ret;
}
};

int main()
{
Handler h;
cout<<"returned by demo():"<<h.demo()<<endl;

return 0;
}

Даже я получаю желаемый результат, который:

server() called
Handler() called
Hello World
returned by demo():1

Но я не могу понять определенную концепцию здесь:

material *matrl()
{
return mat;
}

и вызов функции

ret=svr.matrl()->test_func();

Как это работает и какая концепция стоит за этим? Может ли кто-нибудь помочь мне с этим ???

-3

Решение

Вы можете избежать путаницы, если переписать

material *matrl()
{
return mat;
}

в

material* matrl()
{
return mat;
}

Оба одинаковы.
Это функция, возвращающая указатель на объект типа материала

Сейчас

ret=svr.matrl()->test_func();

поскольку matr1() возвращает указатель на объект, который нужно использовать -> для функции-члена.
*(svr.matr1()).test_func();

1

Другие решения


По вопросам рекламы [email protected]