と通信しない限り、私はちょうど私があなたがここに物事を混乱していると思うソケットメンバーにアクセスすることを確認可能では決してないことを確認したいですか? Javaの背景から来ていますか? C++では、静的クラスは名前空間を定義する別の方法に似ています。クラスメンバーのアクセシビリティを制限するために使用する必要はありません(基本的に「本当の」クラスメンバーではないため)。
もう少し正確にする:キーワードを使用しても結果のコードには何の影響もありません。 「静的クラス」とみなされるのは、通常、static
メンバーのみのクラスです。
あなたが
static
キーワードを使用する方法が原因あなたがクラスを定義することができるしていると同時に、オブジェクトという単純な事実のために働く
:
static class ClassOfStaticObject {
ClassOfStaticObject() {
// ...
}
} myObject;
これは、これと同じようになります:
class ClassOfStaticObject {
ClassOfStaticObject() {
// ...
}
};
static ClassOfStaticObject myObject;
あなたがしなければならないすべては、純粋仮想関数のメンバーを持っていることによってあなたのベースクラスの抽象を作っている、あなたがしたいものを達成するには、次の
class Socket {
Socket(void);
Socket(PORT);
~Socket(void);
// ...
virtual int send(const char *data) = 0;
virtual int recv(const char *data) = 0;
}
このクラスまたはこれらの仮想メソッドを実装していない派生クラスのインスタンスを作成することはできません。代わりに、すべてのコンストラクタをprivate
またはprotected
として非表示にすることもできます。
しかし、私がいないから、すなわち(代わりにして、あなただけの子供からアクセスしたいメンバーを宣言public
を使用してお勧めしたい、あなたはすでに行ったようにあなたがprivate
やprotected
を使用することができ、ベースクラスのメンバーの可視性を制限します外側)はprotected
です。
class Socket {
protected:
Socket(void);
Socket(PORT);
~Socket(void);
// ...
virtual int send(const char *data) = 0;
virtual int recv(const char *data) = 0;
void something_protected();
public:
void something_debug(void);
}
class ServerSocket : public Socket {
// ...
}
この方法では、クラスServerSocket
のオブジェクトにsomething_debug()
を呼び出すことができるでしょうが、あなたは外からsomething_protected()
を呼び出すことはできませんもあなたがクラスSocket
のオブジェクトを作成することができます。
あなた自身でこの質問に答えるためにコードを簡単に試してみることができます。 – EdChum