2016-09-28 26 views
-5

FooとBarの2つのクラスがあるとします。 我々はFooのクラスを宣言すると、次のようにそのメソッドを使用することができます。クラスの前方宣言とクラスの宣言の違いは何ですか?

#include"foo.h" 

Foo foo 

class Bar{ 
    Bar(){ 
     foo.method1(); 
    } 
} 

そして、我々は次のようにFooのクラスを宣言するために立って前方宣言、持っている:

#include"foo.h" 

class Foo 

class Bar{ 
    Bar(){ 
    } 
} 

主な違いは何を2つの宣言の間に、そして前方宣言が通常の宣言に優先されるときは?第2のケースで

+0

有用なリンク:https://www.quora.com/What-exactly-is-the-difference-between-the-declaration-of-a-class-and-a-definition-of-a-class –

+0

あなたの2番目の例では 'Foo'は使用されないので、私はあなたの質問を理解していません – bolov

+1

[C++ - フォワード宣言]の可能な複製(http://stackoverflow.com/questions/4757565/c-forward-declaration) – dkg

答えて

1

あなたは単にコンパイラは「Fooのクラスはどこかにあります。しかし、私はそれがどのように見えるか分からない」と言う前方宣言で

#include"foo.h" 

を必要としません。コンパイラはそれらを参照できますが、使用することはできません。

class Foo; //Forward declaration. 

Foo* foo; // ok. Just pointer. 
Foo foo;// error. Compiler can't instantiate object. 

#include "foo.h" 

Foo* foo; // ok. Just pointer. 
Foo foo;// ok. Compiler can instantiate object. 

したがって、いくつかの場合には前方宣言は、ヘッダファイルを含めることを置き換えることができます。

関連する問題