I've been looking at examples for a component-based system and in some of the examples, I noticed the usage of class names outside of other classes like in the example below. What is the purpose/function of creating class Foo; and class Bar; and what is this called? 
#pragma once
#include "foo.h"
#include "bar.h"
class Foo; // ???
class Bar; // ???
class Example
{
public:
    Example() :
        m_pExample(0) {}
    virtual ~Example() {}
    void something(const Foo& foo, const Bar& bar);
private:
    Example* m_pExample;
};
 
     
     
    