Channels ▼

Al Williams

Dr. Dobb's Bloggers

Take My Advice... Please

July 08, 2011

As I discussed this article with my colleague, I thought that perhaps this is a delineation between developers. Some make tools and others use tools. Maybe tool users don't absolutely need to use inheritance directly, although I'd be hard pressed to suggest that they shouldn't use it in a well-thought out way.

For example, consider the popularity of the Arduino. One of the things that makes it easier (according to its fans) is that it has a main function already written that must look something like this:

void main()
  {
  setup();
  while (1) loop();
  }
Not exactly rocket science, but people apparently like it. (In all fairness, you can override main and that's not the only ease-of-use feature it provides.) With inheritance, however, I can go much further. For a particular piece of hardware, I could define a class like this:

class BaseApp
  {
  public:
  void setup(void);  // by default set up timer interrupt
  void loop(void);
  void tick1s(void);  // 1 second tick
  void tick100ms(void); // 100 ms tick
  };

The tool builder provides the code to set up the timer interrupts and wire them to the "tick" functions. Now a non-tool maker can just derive a new class:

class MyApp : public BaseApp
  {
  public:
	void tick1s(void); 
  };

That makes it easy if the toolmaker anticipated your needs. How can this be an arbitrarily bad thing? I could go on (and I will in another blog) about whether you should even use C++ in an embedded system, and if so, what parts you should probably avoid. But note the word "probably". My opinions and solutions might work for you. But your case may very well be special; only you can decide.

As Cicero said, "Nobody can give you wiser advice than yourself."

Related Reading


More Insights






Currently we allow the following HTML tags in comments:

Single tags

These tags can be used alone and don't need an ending tag.

<br> Defines a single line break

<hr> Defines a horizontal line

Matching tags

These require an ending tag - e.g. <i>italic text</i>

<a> Defines an anchor

<b> Defines bold text

<big> Defines big text

<blockquote> Defines a long quotation

<caption> Defines a table caption

<cite> Defines a citation

<code> Defines computer code text

<em> Defines emphasized text

<fieldset> Defines a border around elements in a form

<h1> This is heading 1

<h2> This is heading 2

<h3> This is heading 3

<h4> This is heading 4

<h5> This is heading 5

<h6> This is heading 6

<i> Defines italic text

<p> Defines a paragraph

<pre> Defines preformatted text

<q> Defines a short quotation

<samp> Defines sample computer code text

<small> Defines small text

<span> Defines a section in a document

<s> Defines strikethrough text

<strike> Defines strikethrough text

<strong> Defines strong text

<sub> Defines subscripted text

<sup> Defines superscripted text

<u> Defines underlined text

Dr. Dobb's encourages readers to engage in spirited, healthy debate, including taking us to task. However, Dr. Dobb's moderates all comments posted to our site, and reserves the right to modify or remove any content that it determines to be derogatory, offensive, inflammatory, vulgar, irrelevant/off-topic, racist or obvious marketing or spam. Dr. Dobb's further reserves the right to disable the profile of any commenter participating in said activities.

 
Disqus Tips To upload an avatar photo, first complete your Disqus profile. | View the list of supported HTML tags you can use to style comments. | Please read our commenting policy.
 


Video