-
É possível se livrar da função attachDataHub e passar o ponteiro da classe diretamente no construtor.
#include <iostream> class BaseDataHub { public: void print(std::string msg) const { std::cout << "Hey, this is DataHub!" << std::endl; std::cout << " I have a message for you: " << msg << std::endl; } }; class BaseQueueManager { private: BaseDataHub* mDataHubPtr; // Queue manager tem um ponteiro para o datahub public: BaseQueueManager(BaseDataHub* datahub) { mDataHubPtr = datahub; } void ProcessQueue() { // Função que acessa membros do DataHub através do seu ponteiro std::cout << "Processing Queue..." << std::endl; mDataHubPtr->print("C++ é legal! "); } }; class DerivedCPDigiMain: public BaseDataHub, public BaseQueueManager { public: DerivedCPDigiMain(int value): BaseQueueManager(this) {} }; int main() { DerivedCPDigiMain cpdigi(6); cpdigi.ProcessQueue(); return 0; }
Por acaso acabei testando algo que não esperava que funcionaria, mas funcionou mesmo sem atribuir explicitamente o ponteiro para o datahub, dispensando a definição de um construtor para o QueueManager. Não sei se é uma definição do C++ ou alguma funcionalidade do compilador g++.
#include <iostream> class BaseDataHub { public: void print(std::string msg) const { std::cout << "Hey, this is DataHub!!!" << std::endl; std::cout << " I have a message for you: " << msg << std::endl; } }; class BaseQueueManager { private: BaseDataHub* mDataHubPtr; // Queue manager tem um ponteiro para o datahub public: void ProcessQueue() { // Função que acessa membros do DataHub através do seu ponteiro std::cout << "Processing Queue..." << std::endl; mDataHubPtr->print("C++ é legal! "); } }; class DerivedCPDigiMain: public BaseDataHub, public BaseQueueManager { }; int main() { DerivedCPDigiMain cpdigi; cpdigi.ProcessQueue(); return 0; }
Please register or sign in to comment