вот что хотелось бы получить:
Код | class TPin{ protected: volatile uint8_t* pin; volatile uint8_t* ddr; volatile uint8_t* port; uint8_t pin_num;
TPin(volatile uint8_t* base, uint8_t pin_num); };
class TOutputPin: public TPin{ public: TOutputPin(volatile uint8_t* base, uint8_t pin_num); bool operator = (bool val); };
class TInputPin: public TPin{ public: TInputPin(volatile uint8_t* base, uint8_t pin_num); operator bool(); };
class TBidirectionalPin: public TOutputPin, TInputPin{ enum{ DirOut, DirIn }; TBidirectionalPin(volatile uint8_t* base, uint8_t pin_num, uint8_t dir) : TPin(base, pin_num) { Direction(dir) }; using TOutputPin::operator =; using TInputPin::operator bool; void Direction(uint8_t dir); };
|
т.е. Bidirectional должен обладать методами Input и Output и добавлять свой метод ума не приложу, как тут можно поступить. не хотелось бы наследовать здесь TPin и реализовывать отдельно методы, существующие в TInpuPin и TOutputPin. возможно, лучше перенести все методы в TPin а в его потомках (TInputPin, TOutputPin и TBidirectionalPin) закрыть доступ к некоторым методам? только как это сделать? |