Как и в большинстве случаев «это плохо делать X?» вопросов, ответ заключается в том, что он полностью зависит от конкретной ситуации.
Иногда может быть очень плохой тип функции getC()
, потому что она прерывает инкапсуляцию. В других случаях это может быть совершенно нормально, потому что инкапсуляция этой детали может быть неактуальной, и запись множества функций-обложек увеличивает количество кода, который вы должны писать.
Выберите, что имеет наибольший смысл для данной ситуации. В коде, который я написал, я использовал оба подхода.
Если вы идете по маршруту getC()
, убедитесь, что вы вернули ссылку; в противном случае вы будете изменять копию, которая не похожа на то, что вы хотите. Или вы можете подумать о том, чтобы сделать A::c
общедоступным, чтобы вам вообще не нужна функция.
Третий вариант рассмотрения будет наследованием от C
, что устраняет необходимость использования getC()
или функций обертки в A
.
Как насчет 'a-> c.setBlah()'? – hanno