次の方法で共有


宣言と定義 (C++)

宣言 はプログラムの要素または名前がであることをコンパイラに指示します。定義 はコードまたはデータを名前で説明するかを指定します。名前は使用する前に宣言する必要があります。

Declarations

宣言はプログラムに一つ以上の名前を導入します。宣言はプログラムに複数回発生します。したがってクラス構造体列挙体などのユーザー定義型はコンパイル単位で宣言できます。この宣言の複数の制約はすべての宣言は同じである必要があります。は定義宣言として宣言するとで実行されます :

  1. 関数プロトタイプ関数本体 () は関数宣言はです。

  2. extern の指定子 (オブジェクト初期化子と変数) または関数本体 (関数) は含まれません。これは定義が現在の翻訳単位に対するないと名前の外部リンケージを示します。

  3. クラス宣言内の静的データ メンバーです。

    クラスの静的データ メンバーはクラスのすべてのオブジェクトで共有する二つの変数であるため定義する必要がありクラス宣言の外側で初期化します。(クラスおよびクラス メンバーに関する詳細についてはクラス を参照してください)。

  4. クラス名の宣言は class T; などの次の定義はになります。

  5. typedef のステートメントです。

定義または宣言の例を次に示します。:

// Declare and define int variables i and j.
int i;
int j = 10;

// Declare enumeration suits.
enum suits { Spades = 1, Clubs, Hearts, Diamonds };

// Declare class CheckBox.
class CheckBox : public Control
{
public:
            Boolean IsChecked();
    virtual int     ChangeState() = 0;
};

定義の宣言は次のとおりです :

extern int i;
char *strchr( const char *Str, const char Target );

定義

定義はオブジェクトの一意の仕様や変数関数クラス列挙子です。定義が一意である必要があるためプログラムは特定のプログラム要素の 1 種類の定義に含めることができます。宣言と定義の間に互換性が 1 になる場合があります。プログラミング要素が宣言され定義する2 次の二つです :

  1. 関数が宣言されていますが関数呼び出しや関数のアドレスを取得する式では参照されません。

  2. クラスの定義を確認する必要としない方法でのみ使用されます。ただしクラスを宣言する必要があります。次のコードはこのようなケースについて説明します :

    // definitions.cpp
    class WindowCounter;   // Forward reference; no definition
    
    class Window
    {
       // Definition of WindowCounter not required
       static WindowCounter windowCounter;
    };
    
    int main()
    {
    }
    

参照

関連項目

基本概念