1

クラスを作成して定義した後(「hファイル」内)。「hファイル」(クラスに属するもの)に加えて、「cppファイル」(クラスのみ)を作成する(または作成しない)にはどうすればよいですか?

4

3 に答える 3

2

これがあなたを動かすための小さな例です。


これはFooのヘッダーファイルです。それを「foo.h」と呼びましょう

#pragma once
#ifndef FOO_H
#define FOO_H

class Foo{
public:
    void function();
protected:
private:
};
#endif

これはFooのソースファイルです。それを「foo.cpp」と呼びましょう

#include "foo.h"
void Foo::function(){
    // ... implement ...
    return;
}

それらを一緒にコンパイルして、オブジェクトファイルを作成できます。これを「foo.o」と呼びます。「foo.o」をリンクすれば、プログラムでクラスを使用できます。
例:

#include "foo.h"
int main(){

    Foo foo;
    foo.function();

    return 0;
}
于 2012-11-12T10:17:37.070 に答える
1

hファイルは記述子ファイルであり、関数/クラスのシグネチャを記述して、他のcppファイルの他のクラスがそれを使用できるようにします。

hファイルをコントラクトと考える必要があります。あなたは義務を宣言しています。

後で、cppを実装することを決定したとき、あなたは義務を果たしています。

他のclasses/cppファイルは、cppで義務を実装することを前提として、義務のみに依存する可能性があります。

例えば:

  1. .hファイル「myClassA.h」を作成し、myClassA.SayHello()というメンバーメソッドを使用してmyClassAというクラスを宣言します。
  2. myClassB.cppを作成する別のクラスにmyClassA.hを含めると、myClassBはmyClassAにSayHello()というメソッドがあり、それを呼び出すことができることを認識します。
  3. myClassA.hを含めずに、myClassB.cpp内でmyClassA.SayHello()を呼び出そうとすると、myClassBはmyClassAを「認識」しないため、コンパイラからエラーが発生します。
  4. hファイルを含めても、myClassA.cppでmyClassAを実際に作成して実装しなかった場合、実装が見つからなかったため、コンパイルエラーが発生します。
于 2012-11-12T10:22:12.457 に答える
0

ベストプラクティスは、ヘッダーファイルと実装ファイルを分離して、ヘッダーファイル.h内にクラスを定義し、それを.cppファイル内に実装することです。これにより、エラーのトレースとデバッグに役立ち、クリーンなコードが表示されます。

テンプレートクラスでは、テンプレートを通常のクラスから分離することでコードを適切に構造化してクリーンに保つために、別のヘッダーファイルで定義する必要があることに注意してください。

于 2012-11-12T10:14:37.603 に答える