4

私は約14年前に少しC++をプログラムしました。私は、主に使用している.NETなどの新しいテクノロジーに精通しました。

今、私は、C#とC ++の違いをよりよく見ることができるように、C++にしたい単純な電話リストのWindowsアプリケーションを書いています。

私はすでに違いに気づいたと言わせてください!Hehehe ...したがって、これらの違いの1つは、VisualStudioテンプレートから新しいC++クラスを作成するときに、.cppクラスファイルだけでなく、ヘッダーファイルも一緒に作成することです。

どうしてこんなことに?1つのクラスに対してclass1.hファイルとclass1.cppファイルを作成するのはなぜですか?

ヘッダーファイルは関数とオブジェクトのライブラリである可能性が高いことを覚えています。そう言えば、将来の再利用のために、正しく覚えていますか?

質問

  1. 新しいC++クラスを追加するときに2つのファイル(.hと.cpp)が作成されるのはなぜですか?
  2. ヘッダーファイルでメンバーを定義し、cppファイルで関数コアを定義する必要がありますか?
  3. いいえから2の場合、この特定のシナリオでのヘッダーファイルは何ですか?

編集#1

それでは、私のコードは次のようになりますか?

// Customer.h header file
ref class Customer {
    private:
        char* _number, _name;
        long _phoneNumber;

    public:
        char[] get_number();
        void set_number(char* number);
        char[] get_name();
        void set_name(char* name);
        long get_phoneNumber();
        void set_phoneNumber(long phoneNumber);
        void set_name(char* name);
}

それで:

// Customer.cpp
#include <Customer.h>

char[] Customer::get_number() {
    return _number;
}

void Customer::set_number(char* number) {
    if (number != null && sizeof(number) < 1) return;
    _number = number;
}

// And the other members here...

今、私は知っています、私のコードにはほとんど多くのエラーがあります。C ++スキルを向上させるために、修正を手伝っていただければ幸いです。

私がそれを理解するのを手伝ってくれてありがとう。

4

4 に答える 4

4

C ++の関数とクラスは、使用する前に宣言する必要があります。これは、これらの関数をこのファイルから使用できることを示す宣言にすぎません。これらの宣言は、ヘッダーファイル(.hpp/.hファイル)を使用してインポートされます。

関数を宣言するには、次のように記述します。

return type function name ( arguments );

したがって、この関数は次のようになります。

int factorial (int x)
{
  if (x == 0)
    return 1;
  return x * factorial (x - 1);
}

このように事前に宣言されます:

int factorial (int x);

クラスの宣言は次のようになります。

class class name { function and variable declarations };

したがってclass Foo、メソッドを使用するbarと、パブリックメンバー変数bazは次のようになります。


foo.hpp:

#ifndef FOO_HPP_
#define FOO_HPP_

class Foo
{
public:
  int baz;

  void bar ();
};

#endif

foo.cpp:

#include "foo.hpp"
#include <iostream>

void Foo::bar ()
{
  std::cout << baz << std::endl;
}
于 2010-12-06T20:10:32.523 に答える
2

クラスはヘッダーで宣言され、ほとんどの機能は.cppファイルで定義されます。このツールは、このインターフェースと実装の分離を実現するのに役立ちます。

ヘッダーと.cppファイルの分離について考える方法は次のとおりです。

  • ヘッダーには、他のファイルで使用される宣言が含まれています。
  • .cppファイルには実装が含まれています。

その理由は、多くのファイルで機能を利用できるようにしたいが、実際にはその機能を1か所で定義したいだけだからです。

于 2010-12-06T19:57:52.167 に答える
1

ヘッダーファイルはクラスを宣言/定義します。これには、メンバー関数、メンバーデータ、フレンドなどが含まれます。通常、実装の多く(存在する場合)は含まれません(テンプレートは例外です)。

実装ファイル(* .cpp)はまさにそれです:それらはクラスを実装します。

実装ファイルを使用する必要はありません(インラインクラスを作成するようにVSウィザードに指示すると、ヘッダーファイルのみが作成されます)が、通常はテンプレートクラス(STLクラスなど)に対してのみ実行されます。 Boostライブラリのクラスの)または非常に単純なクラス。

于 2010-12-06T20:00:33.380 に答える
1

ヘッダーファイルは、C#とほとんど変わらないため、C++のコンパイルに必要です。

C#では、バイナリモジュール間のリンクは常に動的です。C ++では、静的リンケージと動的リンケージに違いがあります。詳細に入ると、私は1時間の執筆に時間がかかりますが、それを可能な限り最短の方法としましょう。

C ++では、すべての.cppファイルが個別にオブジェクトファイルにコンパイルされます。バイナリファイルを作成するには、そのファイルを他のファイルにリンクする必要があります。ヘッダーファイルは、それが含まれている.cppファイル(クラスに定義されたメソッドを呼び出すファイル)に必要なすべてのメソッドシグネチャを宣言します。

C#では、すべてのファイルが単一のバイナリファイルにコンパイルされます。コンパイラは、コンパイルしているメンバーがどのクラスとメソッドを表示できるかを常に認識しています。

于 2010-12-06T20:00:45.970 に答える