0

少し疑問があります。

C++ コードにいくつかの関数を追加していますが、これらの関数はクラスの関数によって呼び出されています。

これらの余分な関数をクラスの一部にする必要がありますか?それとも C++ クラスの関数で C 関数を呼び出すことができますか?

はいの場合、メイクファイルをどのように変更する必要がありますか?

ありがとう!

4

3 に答える 3

1

いくつかの宣言を含め、コンパイルのある時点で C 関数がリンクされている限り、任意の C++ 関数で C 関数を呼び出すことができます。例えば:

mycfunc.h:

void test(int x);

myfunc.c:

void test(int x) {
  printf("%d\n", x);
}

ここで、関数を使用するヘッダー ファイルをインクルードするだけです。Makefile では、最終的なコンパイルに "myfunc.c" (オブジェクトをコンパイルしている場合は .o) が含まれていることを確認してください。

于 2012-08-02T15:01:24.957 に答える
1

それらをクラスに入れる必要はありません。関数は C と同じように C++ にも存在するため、そのまま使用できます。試してみて、問題があればもう一度質問してください。関数を C++ プロジェクトに追加すると述べたように、すべてのコードを C++ として扱います (そして考えてください)。プロジェクトの残りの部分と同じファイル名拡張子を使用して、新しいものをファイルに入れます。

OPからのコメントに応じて編集:

はい、この場合、C と C++ の違いについて考える必要はありません。.cpp ファイルを書き込むだけです。メイクファイルでは、他のファイルがそこにリストされているのと同じように、それらのファイルを追加するだけです。

既存の C++ コードがあり、C から if を使用する必要がある場合、またはたとえば、既存の C ライブラリがあり、C++ からそれを呼び出す必要がある場合、C と C++ の区別は重要です。あなたの場合、C++ に固執しない理由はほとんどないでしょう。Java とは異なり、独立した機能を持つことはまったく自然なことです。C++ 標準ライブラリにも多数あります。

さて、あなたの場合、クラスに追加する(変更または継承を使用する)のではなく、独立した関数を持つことが良い設計である場合、投稿した情報を考えるとわかりにくいです。しかし、既存のクラスのプライベート部分にアクセスせずに自然な方法で行う必要がある場合、答えは「はい」である可能性が非常に高くなります。

于 2012-08-02T15:04:44.217 に答える
1

C++ は純粋なオブジェクト指向言語ではありません。

したがって、C と同じように命令形を使用できます (モジュラーであるかどうかに関係なく)。

オブジェクトにカプセル化されていない一部の C 関数は、c* インクルード (たとえば ctime) を使用してアクセスできます。

于 2012-08-02T15:14:31.363 に答える