4

別のクラスを使用するよりも、あるクラスの1つのメソッドを呼び出すにはどうすればよいですか?

私は持っています ;

class A { 
 public :
  foo ( ) ;
};

class B {
 public :
  bar ( ) ;
};

主に:

A data ;          // I am creating instance of class A 

data . bar ( ) ;  //  but, I am calling a method of another class

                  // how can I do that ?

注:適切なタイトルが見つかりませんでした。お持ちの場合は、お気軽に共有または編集してください

4

9 に答える 9

1

2 つのクラスが (継承によって) 関連していない限り、それはできません。

メンバー関数は、それが属するクラスのインスタンスに対して何らかのアクションを実行します。
クラスのオブジェクトを作成したため、それを介して Aのみメンバー関数を呼び出すことができます。A

りんごをすりつぶしてマンゴーシェイクを期待するのは、実際にはうまくいきません。

于 2012-05-27T07:29:17.233 に答える
1

公開継承を使用します。

class B {
 public:
  void bar();
};

class A : public B
{ };

int main() {
 A a;
 a.bar();
}
于 2012-05-27T07:33:59.510 に答える
0

誰もが答えで言ったように。それは悪い考えであり、不可能です。

使用できるのは、その動作が実際には誰にもわからないトリックだけです。

オブジェクトAのポインターを取得し、それをBのポインターとしてキャストできます。

繰り返しますが、それの唯一の使用法は、他の人に何をしてはいけないかを示すことです。

A a;
B* b = (B*)&a;
b->bar();
于 2012-05-27T08:44:44.500 に答える
0

オブジェクトAで.bar()を使用する場合は、Bを継承する必要があると思います。

于 2012-05-27T07:09:29.220 に答える
0

あなたが何をしたいdata.bar()のかは明らかではありません。

bar()Aのデータにアクセスbar()できないため、変数とは何の関係もありませんdata。だから、それdata.bar()は不必要だと私は主張しますbar(). おそらく、bar()が単なる関数の場合、それを宣言しstaticて呼び出すことができますB.data()

他のオプションは、他の人がすでに書いている継承が必要だったということです。継承には注意してください。is-a 関係があり、 Liskov Principleを満たす場合にのみ、B から A を継承するようにしてください。を呼び出さなければならないという理由だけで B から継承しないでくださいbar()

B を使用する場合は、A 内に B のインスタンスを含めることができます。継承よりも構成を優先する方法について読んでください。

于 2012-05-27T07:41:37.677 に答える
0

1 冊か 2 冊の c plus plus 本を読んで、クラスとは何か、そしてそれらが提供する目的を理解する必要があると思います。

いくつかの提案: Bjarne Stroustrup による c++ プログラミング、または Bruce Eckel による c++ での思考、またはネットでチュートリアルを検索してください。

于 2012-05-27T09:24:06.197 に答える
0

class をof classBとして宣言することもできます。friendA

その構文は次のとおりだと思います。

class A {
    public:
        foo();
    friend class B;
};
class B {
    public:
        bar();
};

Aしかし、これでは、関数内からのみ関数/変数を使用できると思いますB。継承は、おそらくそれに対するより良いアプローチになるでしょう。

于 2014-06-18T02:39:18.893 に答える