2012-01-24 9 views
1

私は単純なメソッド "doSomething()"を持つ単純なオブジェクト "ObjectX"を持っています。 doSomethingに他のObjectXだけでアクセス可能にしたいと思います。言い換えれば、静的であるかオブジェクト型 "ObjectX"のオブジェクトでないものがdoSomethingを呼び出そうとすると、それはできなくなります。ただし、ObjectX型のオブジェクトがメソッドを呼び出そうとすると、それは可能になります。C++特殊メソッドの可視性

これはプライベートメソッドと異なり、プライベートメソッドはそのオブジェクト内にある同じオブジェクトからのみ呼び出すことができます。別のオブジェクトでそのメソッドを呼び出す同じ型の別のオブジェクトがあった場合、ロックされますでる。

+4

friend B;を指定することにより、Bの友人を作るだけでなくBへのアクセスを提供したい場合はいいえ、プライベートメソッドは同じオブジェクトから呼び出されることに限定されるものではありません。同じタイプの別のオブジェクトが使用できますが、ロックされません。 –

+0

@セス・オオ、本当ですか?私の間違い!答えとして、私は受け入れることを喜んでするでしょう:) –

答えて

4

privateほとんど正確に何をしますか?同じタイプのオブジェクトだけがメソッドを使用することができ、他のオブジェクトはそれらの関数を他のオブジェクトで呼び出すことができます(つまり、関数は呼び出し元のオブジェクトに限定されません)。

唯一のことは、同じクラスのstaticの機能でもprivate機能を使用できることです。関数をオブジェクトにのみ制限することができる言語機能はありません(staticファンクションを除く)。

+0

静的メソッドがそれにアクセスできると言うと...これは、すべての静的メソッドがそれにアクセスできることを意味しますか、同じ静的メソッド内の静的メソッドに限定されていますかクラス? –

+0

同じクラスの@GeorgesOatesLarsen静的関数。 –

+0

ああ!ありがとうございました!私はあなたの答えを9分で受け入れます –

2

私はあなたの事実をどこで取得するのか分かりません。プライベート関数A::fooは、タイプAの任意のオブジェクトから呼び出すことができます。それ自体でも、別のインスタンスでもかまいません。

class A 
{ 
public: 
    void foo(const A& other) { other.priv(); } 

private: 
    void priv() const {} 
}; 


int main() 
{ 
    A a1, a2; 
    a1.foo(a2); 
    return 0; 
} 
0
C++で

Class A{ 
    A a; 
    doSomething(){ 
    a.doSomething(); 
    } 
} 

上記のコードでは、これが理由のコピーコンストラクタ作品ですwork.Andでしょう。

Class B{ 
    A a; 
    doSomethingElse(){ 
    a.doSomething(); 
    } 
} 

上記は、とにかく動作しません。

あなたはクラスA