0

クラスのソースファイルを含めずに、ソースコードファイルをクラスのオブジェクトファイルにリンクしてコンパイルできるかどうかを知りたいです。

または

Javaのように、私はコンパイルされた* .classファイルを友人とそのクラスのドキュメントにソースコードを与えずに与えることができ、彼は実際のソースを知らなくても必要に応じてそのクラスを含めることができます。

C ++で正確なことを行うことはできますか?そしてどうやって ?

参考:MinGWを使用しています。

私はまったく新しいので、これはばかげた質問のように見えるかもしれません(しかし、それでもばかげた質問はありません)。

4

4 に答える 4

1

C ++では、実行可能ファイル(Windowsでは.exe、通常Linuxでは拡張子なし)、ライブラリファイル(.libまたは.a)、または共有ライブラリ(.dllまたは.so)を、目的に応じて作成できます。 。

ライブラリを提供する場合は、クラス宣言を含むヘッダーファイルも提供する必要があります。詳細についてあまり詳しく説明したくない場合は、ヘッダーファイル内の実装への単なるポインタである「実装」クラスを作成できます。実際の実装は、の所有者としてのみ利用できます。ソース。

詳細については、ThomasMatthewsが提案した「PIMPL」を検索する必要があります。これは「PointertoIMPLementationclass」の略です。基本的に、「パブリック」クラスは、他の人に見てもらいたい関数を提供する単なるシェルであり、その中の実装クラスはすべての大変な作業を行います。

簡単な例

ヘッダーファイル:

// Forward declaration of the implementation class. 
class double_it_impl;

// Class that stores an integer, and doubles it each time you 
// call doubling().
class Public_double_it
{
  public:
    public_double_it(int x);    // COnstructor. 

    int doubling();        // Function d

  private:
     double_it_impl *pImpl;
};

ソースまたはプライベートヘッダーファイルで、実際の実装を宣言します。

class double_it_impl
{
  public:
    double_it_impl(int x) : m_x = x; {};
    int doubling()  { m_x *= 2; return m_x; }

}


public_double_it::public_double_it(int x)
{
    pImpl = new public_double_it(x);
}

int public_double_it::doubling()
{
   return pImpl->doubling();
}

これで、実装クラスに何が含まれているのか、どのように機能するのかがわかりません。もちろん、これは非常に簡単な例ですが、それがアイデアを伝えてくれることを願っています。

于 2013-01-13T19:54:37.230 に答える
0

それらに*.classを与えることはできますが、逆コンパイルすることはできます。

ほとんどのライブラリは、クラスと生成されたJavadocを使用して提供されます。

于 2013-01-13T19:24:50.637 に答える
0

クラスをライブラリ、dll、または共有ライブラリにコンパイルして、友達に渡すことができます。

インターフェイスを定義するヘッダーファイルが必要になります。

PIMPLイディオムも参照してください。

于 2013-01-13T19:52:50.543 に答える
0

はい、コンパイルされたオブジェクトファイルとドキュメントを提供できます。他のユーザーは.o(または.obj)ファイルをコードにリンクできます。これを行う方法の正確な詳細は、コンパイラーと開発環境によって異なります。g ++を使用している場合は、次のコマンドラインを使用するだけです。

g++ -c source.cpp

これにより、.oファイルが作成され、あなた(または他の誰か)が他の.oファイルとリンクできるようになります。

g++ main.o source.o

他のコンパイラにも同様のオプションがあります。オブジェクトファイルの作成方法については、ヘルプファイルやその他のドキュメントをお読みください。

多数の関数やクラスについては、ライブラリファイルの作成を検討する必要があります。これらは静的または動的にリンクできます。独自のライブラリファイルを作成する方法について知りたい場合は、Webで詳細を検索することをお勧めします。

于 2013-01-13T20:01:47.200 に答える