Velocity Reviews

Velocity Reviews (http://www.velocityreviews.com/forums/index.php)
-   C++ (http://www.velocityreviews.com/forums/f39-c.html)
-   -   overloaded name + inheritance (http://www.velocityreviews.com/forums/t718274-overloaded-name-inheritance.html)

jrraines 03-20-2010 07:58 PM

overloaded name + inheritance
 
There is an arduino library for LCD displays called LiquidCrystal. At
present the class has the ability to handle either 4 or 8 data pins
and various forms of testing the LCD's busy flag. The initial part of
the declaration looks like this:
class LiquidCrystal : public Print {
public:
LiquidCrystal(uint8_t rs, uint8_t enable,
uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3,
uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7);

LiquidCrystal(uint8_t rs, uint8_t rw, uint8_t enable,
uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3,
uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7);


LiquidCrystal(uint8_t rs, uint8_t rw, uint8_t enable,
uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3);

LiquidCrystal(uint8_t rs, uint8_t rw, uint8_t enable, uint8_t en2,
uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3); //4x40 LCD w
2x HD44780 controller chips, 2 enable lines to select between them 4
data pins

LiquidCrystal(uint8_t rs, uint8_t rw, uint8_t enable, uint8_t en2,
uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, void (*userFunc)
(int8_t chip) ); //4x40 LCD w 2x HD44780 controller chips, 2 enable
lines to select between them 4 data pins

LiquidCrystal(uint8_t rs, uint8_t enable,
uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3);

LiquidCrystal(uint8_t rs, uint8_t enable,
uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3 , void (*userFunc)
(int8_t chip));

The overloaded versions here imply that either 4 or 8 data pins will
be used and all but one implies the specific form of the busy flag
test. Presently each user gets object code that includes both 4 and 8
bit capability and all versions of the busy test. It strikes me that I
could refactor this with a protoclass that would include the common
elements, then create new protoclasses that would handle either 4 or 8
bits and finally create 7 classes that included just the appropriate
busy test and code for 4 or 8 pins. I think each user would save
several hundred bytes by eliminating the unnecessary portions of code.
Some flags and flag testing would also vanish. On a little 8 bit
Arduino, that is a significant benefit. The piece that I'm struggling
with is whether it is possible to do this without changing the
apparent API--can I have 7 versions that have the same overloaded name
and have each of them inherit differently?

Michael Tsang 03-22-2010 08:10 AM

Re: overloaded name + inheritance
 
On Sunday, March 21, 2010 03:58 AM, jrraines wrote:
> There is an arduino library for LCD displays called LiquidCrystal. At
> present the class has the ability to handle either 4 or 8 data pins
> and various forms of testing the LCD's busy flag. The initial part of
> the declaration looks like this:
> class LiquidCrystal : public Print {
> public:
> LiquidCrystal(uint8_t rs, uint8_t enable,
> uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3,
> uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7);
>
> LiquidCrystal(uint8_t rs, uint8_t rw, uint8_t enable,
> uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3,
> uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7);
>
>
> LiquidCrystal(uint8_t rs, uint8_t rw, uint8_t enable,
> uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3);
>
> LiquidCrystal(uint8_t rs, uint8_t rw, uint8_t enable, uint8_t en2,
> uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3); //4x40 LCD w
> 2x HD44780 controller chips, 2 enable lines to select between them 4
> data pins
>
> LiquidCrystal(uint8_t rs, uint8_t rw, uint8_t enable, uint8_t en2,
> uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, void (*userFunc)
> (int8_t chip) ); //4x40 LCD w 2x HD44780 controller chips, 2 enable
> lines to select between them 4 data pins
>
> LiquidCrystal(uint8_t rs, uint8_t enable,
> uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3);
>
> LiquidCrystal(uint8_t rs, uint8_t enable,
> uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3 , void (*userFunc)
> (int8_t chip));
>
> The overloaded versions here imply that either 4 or 8 data pins will
> be used and all but one implies the specific form of the busy flag
> test. Presently each user gets object code that includes both 4 and 8
> bit capability and all versions of the busy test. It strikes me that I
> could refactor this with a protoclass that would include the common
> elements, then create new protoclasses that would handle either 4 or 8
> bits and finally create 7 classes that included just the appropriate
> busy test and code for 4 or 8 pins. I think each user would save
> several hundred bytes by eliminating the unnecessary portions of code.
> Some flags and flag testing would also vanish. On a little 8 bit
> Arduino, that is a significant benefit. The piece that I'm struggling
> with is whether it is possible to do this without changing the
> apparent API--can I have 7 versions that have the same overloaded name
> and have each of them inherit differently?


You are showing the constructors only. Constructors cannot be inherited.
(although you can explicitly inherit them by a using declaration in C++0x)


All times are GMT. The time now is 10:38 PM.

Powered by vBulletin®. Copyright ©2000 - 2014, vBulletin Solutions, Inc.
SEO by vBSEO ©2010, Crawlability, Inc.