2017-01-09 7 views
1

問題はかなり基本的であり、同じ質問がここにどこか確かにありましたが、私は見つけることができませんでした。オブジェクトBのオブジェクトCのメソッドへのアクセスは、オブジェクトAによって作成されました

ここに問題があります。 TopはMyCircleへのアクセス権を持ち、SetSize関数を呼び出します。しかし、MyCircleにはMyRectへのアクセス権がありません。

私がMyCircleのコンストラクタ内でMyRectへのポインタを提供している場合、私はMyRectにアクセスできますが、別の方法があるはずです。多分私はちょうどあなたの助けのためのすべての:(おかげで、それは間違っていました。

class Top{ 
    public: 
     Rect myRect; 
     Circle myCircle; 
     void Run(); 
}; 

class Rect{ 
    public: 
     int size; 
}; 

class Circle{ 
    public: 
     int size; 
     void SetSize(int buffer); 
}; 

void Circle::SetSize(int buffer){ 
    myRect.Size = buffer; 
} 

void Top:Run(){ 
    myCircle.SetSize(10); 
} 
+1

パラメータとして渡してみませんか?また、 'Circle'がサイズ変更時に' Rect'のサイズを変更する必要がある場合、あなたは何か間違っています:どちらのクラスも互いに関係がありません。 – Rakete1111

+1

これら3つのオブジェクトの間で達成しようとしている関係を説明できますか? 'Circle'は' Rect'のサイズを設定できる必要があるのはなぜですか?なぜトップはできないのですか? –

+0

トップはそれを行うことができますが、私は方法があるかどうか疑問に思っていましたサークルは "受け入れられた方法"でそれを行うことができます – Raros

答えて

0

の円クラスに長方形を渡さないでください、円は四角形についての知識がない(または必要があります

代わりに円と矩形の両方を使って上に機能を作ってそれに作用してください。 あなたのやりたいことはまったく分かりませんが、サイズを均等に設定したいとします。 TopのSetSizeメソッドで、円と四角形のサイズを設定します。

class Top{ 
    public: 
     Rect myRect; 
     Circle myCircle; 
     void Run(); 

     void SetSize(int size)   
} 

where SetSize is implemented as: 

     myRect.SetSize(size); 
     myCircle.size = size; 

複数の派生オブジェクトを処理するコードを、子クラスではなくベースクラスに配置する方が、常に良いことです。多すぎる(または無関係な)機能が基本クラスにある場合は、別のクラス(SizeHandlerなど)を作成します。

btw、パブリックプロパティを使用しない方が良いですが、常にメソッドを取得/設定してください。

+0

私は 'mycircle.SetSize(myrect.size);のようなものを使っていました。私はこれをmycircleに直接実装することができますが、私はそれを考えるとgerneralでは意味がありません。問題を解決しました – Raros

+0

私は、更新されたバージョンでいくつかのアドバイスを追加します。 –

関連する問題