Я просматривал фрагмент кода, когда натолкнулся на что-то новое. Однако я попытался написать свой собственный код для лучшего понимания.Невозможно понять эту концепцию обработчиков в C++
#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;
}
и вызов functionn
ret=svr.matrl()->test_func();
Как это wo rking и какая концепция является концепцией этого? Может кто-нибудь мне помочь?
Есть одна проблема: 'mat' никогда не назначается или не инициализируется. Но для семантики этого кода здесь нет ничего особенного: «сервер», на который можно попросить «материал», с помощью которого вы можете что-то сделать «test_func». –
@ Jean-BaptisteYunès Можете ли вы объяснить из вывода программы, как вызываемый Server() отображается перед вызовом Handler(). Я этого не понял. в соответствии с моим пониманием должен быть вызван первый обработчик(). –
@DigviJayPatil. Все элементы инициализируются перед телом конструктора. Если вы не делаете этого самостоятельно, они инициализируются по умолчанию, что означает вызов конструктора по умолчанию для 'svr'. – chris