Я думаю, что вывод вашего класса "edit_data" из вашего класса "dbconnect" демонстрирует путаницу логики. Является ли ваш объект редактирования данных особым типом соединения с базой данных? Или, может быть, имеет смысл сказать, что объекту редактирования данных нужно использовать соединение с базой данных? (Это разница между IS A и HAS A.)
Хотя сейчас это, кажется, выходит из моды, вы можете использовать вызов фабрики-одиночки для получения обработчика базы данных. Тогда любая функция, которая нуждается в этом, может просто вызвать ее. Если вы сделаете обработчик самостоятельно инициализирующим в первый раз, когда он должен выполнить какую-либо работу, то ничто не должно даже волноваться об инициализации. (Чтобы сделать это, проверьте, является ли переменная экземпляра, содержащая дескриптор, дескриптором ресурса - если нет, вызовите инициализатор. Не забудьте решить, что делать, если соединение не удается.) Тогда вам просто нужно, чтобы обработчик нашел его конфигурацию , Я бы сделал так, чтобы это делал фабричный вызов, а не инициализатор.
Один из возможных способов сделать так, чтобы конструктор получил текущий обработчик базы данных и поместил ссылку на него в переменную экземпляра. Это можно сделать несколькими способами. Требование этого в конструкторе может сработать, или вы можете снова обратиться к вызову фабрики-одиночки. Этот метод дает конструктору объекта возможность отказать в создании экземпляра, если обработчик базы данных не инициализируется (вызов фабрики может это проверить).