Я читал разные статьи и руководства по файлам заголовков. Я понимаю, что заголовки служат для сохранения «интерфейса» от реализации. (и другие вещи, как оптимизация компиляции)Заголовки C++, связанные с классами
Что я до сих пор не понимаю, и на самом деле не могу обдумать его вокруг, всегда ли вы используете заголовки? Я знаю, что вы можете писать блоки кода внутри самого файла заголовка. Но вот где я заблудился.
Когда я смотрю видеоурок, люди просто определяют функции своим телом в файле заголовка. Тогда в другой статье определяются только функции (я предполагаю, что это идея интерфейса).
На данный момент я делаю простой класс с именем Color. реализация:
/*
* 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;
}
и здесь заголовок
/*
* 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 */
Этот код работает, я не получаю никаких ошибок. Но является ли это общей идеей заголовков и файлов cpp? И мой второй вопрос: Я много читал, что при использовании шаблонов проще всего реализовать код внутри заголовка. Я понимаю это (чтобы предотвратить множество реализаций для чего-то, что должно быть таким общим). Но есть ли другие ситуации? Я слишком долго ломаю голову над этим. Не из примеров, которые я встретил, дал мне конкретный ответ. И это действительно на моих нервах = (
Спасибо за ваше время,
Sidar
Edit: Я просто понял, я устанавливаю значение RGB в деструкторе ... LOL. Так что да, я знаю об этом =)
Благодарим вас за ответ. Теперь это имеет больше смысла. Наверное, мне просто нужно сделать больше C++, чем Java/C#, чтобы привыкнуть к нему. Я должен больше узнать о тех встроенных функциях. – Sidar