I've been reading different articles and tutorials on Header files. I understand that Headers serve for the purpose of keeping the "interface" from the implementation. ( and other things like some compile optimization )
What I still don't get, and really can't wrap my mind around it, is do you always use headers? I know you can write blocks of code within a header file itself. But that is where I get lost.
When I look at a video tutorial, people just define functions with their body within the Header file. Then a different article only defines the functions ( I guess that is the idea of an interface).
Just for now I'm making a simple class named Color. implementation:
/* 
* File:   Color.cpp
* Author: Sidar
* 
* Created on 26 december 2011, 16:02
*/
#include <stdio.h>
#include "Color.h"
Color::Color() {
 reset();
}
Color::Color(const Color& orig) {
 a = orig.a;
 r = orig.r;
 g = orig.g;
 b = orig.b;
}
void Color::reset()
{
    a = 0;
    r = 0;
    g = 0;
    b = 0;
}
 Color::Color(unsigned int r, unsigned int g, unsigned int b, unsigned int a)
 {
   this->r = r;
   this->g = g;
   this->b = b;
   this->a = a;
 }
Color::~Color() {
   r = 0;
   g = 0;
   b = 0;
 }
 //getters____________________________
 unsigned int Color::getRed() const
 {
   return r;
 }
 unsigned int Color::getBlue() const
 {
   return b;
 }
 unsigned int Color::getGreen() const
 {
    return g;
 }
 unsigned int Color::getAlpha() const
 {
   return a;
 }
 //setters____________________________
 void Color::setRed(unsigned int r)
 {
   if(r > 255)r = 255;
   if(r < 0)r = 0;
   this->r = r;
}
void Color::setGreen(unsigned int g)
{
  if(g > 255)g = 255;
  if(g < 0)g = 0;
  this->g = g;
}
 void Color::setBlue(unsigned int b)
{
   if(b > 255)b = 255;
  if(b < 0)b = 0;
  this->b = b;
}
void Color::setAlpha(unsigned int a)
{
 if(a > 255)a = 255;
 if(a < 0)a = 0;
 this->a = a;
 }
 unsigned int Color::color()
 {
   return (int)a << 24 | (int)r << 16 | (int)g << 8 | (int)b << 0;
  }
and here the header
/* 
 * File:   Color.h
 * Author: Sidar
 *
 * Created on 26 december 2011, 16:02
 */
 #ifndef COLOR_H
#define COLOR_H
#include <string>
class Color {
public:
    Color();
    Color(const Color& orig);
    Color(unsigned int r,unsigned int g,unsigned int b, unsigned int a);
    virtual ~Color();
    //____________________
    void setRed(unsigned int r);
    unsigned int getRed()const;
    //____________________  
    void setBlue(unsigned int b);
    unsigned int getBlue()const;
    //____________________
    void setGreen(unsigned int g);
    unsigned int getGreen()const;
    //____________________
    void setAlpha(unsigned int a);
    unsigned int getAlpha()const;
    //____________________
    unsigned int color();
   void reset();
private:
    unsigned int r;
    unsigned int b;
    unsigned int g;
    unsigned int a;
};
#endif  /* COLOR_H */
This code does work, I'm not getting any errors. But is this the general idea of headers and cpp files? And my second question: I read a lot that when using Templates it's easier to just implement the code within the Header I understand this(to prevent many implementations for something that is suppose to be so generic). But are there any other situations as well?
 
     
     
     
    