まず第一に、C++の aclass
と aの唯一の違いは、クラスのメンバーはデフォルトであり、構造体のメンバーはデフォルトであるということです。コンパイラによって生成された ctor と dtor は、どちらの場合でも表示されます - プログラマが特に指定しない限り (たとえば、デフォルトの ctor をセクションに移動します)。そうしないと、マークされたユーザー定義型のインスタンスの構築と破棄は、明示的なパブリック宣言なしでは不可能になり、コンパイラによって生成された関数の目的そのものに逆らうことになります。struct
private
public
private
class
したがって、基本的に、あなたの例で行うことは、完全に合法的な2つのユーザー定義型の構成にすぎません。のインスタンスを作成するとcapture
、 のインスタンスtest
も作成されます。
できないAttachToInput()
ことは、 の外部test
および派生型からパブリックにアクセスすることですtest
。public
この行をコンパイルするには、関数を宣言する必要があります。
h_cap.h_app.AttachToInput(); // error: member function of `test` is protected
別の無関係なメモ(しかし、私はそれに出くわしたので言及します)、 yourclass test
は への生のポインタを保持していますchar
。指しているエンティティの有効期間が、ポインターを保持するオブジェクトの有効期間を超えることが保証されている場合は、生のポインターを保持しても問題ありません。それ以外の場合、オブジェクト自体がエンティティの破壊に関与している可能性が非常に高くなります。誰が何を所有し、誰が割り当てと割り当て解除の責任を負うのかを確認する必要があります。
編集:この回答を書いている間、アラン・ストークスがコメントセクションで同じことを提案したことに注意してください。:)
EDIT2 :派生クラスの宣言方法に応じて、わずかな見落とし、暗黙のデフォルト アクセスも基本クラスに対して想定されます。C++ の構造体とクラスの違いは何ですか? を参照してください。.