プロが教えるわが家の防犯対策術!

c++で、あるクラスのメンバ関数から、別のクラスのメンバ関すを呼びたいのですが、どのようにしたらできますか?
例えば、以下のような単純なコードを考えています。やりたいことは、Aのメンバ関数であるaaa()からBのクラスであるbbb()を呼びたいと思っています。その理由を少し説明します。ここでは、Aというクラスとmain関数はオープンソースコードを例えています。できるだけ、元のオープンソースコードを書き換えずに新たな機能を拡張したいと思っています。そこで、Bというクラスを使って、元のオープンソースコードに機能を拡張しようとしています。このような理由なので、bbb()という関数はaaa()という関数から呼びたいです。メイン関数には何も書き加えないのがベストです。
現状では、実行すると「this is aaa」という出力しか出ません。ここに「this is bbb」の出力を加えたいです。クラスAとBにある程度コマンドを追加して、解決できないでしょうか。

#include <iostream>
using namespace std;

//------------------------------------------------------
class A{
public:
void aaa();
virtual void bbb(){}
};
//------------------------------------------------------

//------------------------------------------------------
class B : public A{
public:
void bbb();
};
//------------------------------------------------------

//------------------------------------------------------
void A::aaa()
{
cout << "this is aaa \n";
bbb();
}
//------------------------------------------------------

//------------------------------------------------------
void B::bbb()
{
cout << "this is bbb \n";
}
//------------------------------------------------------

//------------------------------------------------------
int main()
{
A a;
a.aaa();
return 0;
}
//------------------------------------------------------

A 回答 (3件)

Aを極力触りたくないのであれば、あまりカッコよくありませんが、AがBを継承するではどうでしょうか?


提示コードを以下のように書き換えれば、とりあえず期待する動きはすると思います。

//------------------------------------------------------
class B {
public:
virtualvoid bbb();
};
//------------------------------------------------------

//------------------------------------------------------
class A: public B{
public:
void aaa();
};
//------------------------------------------------------
※ その他はそのまま
    • good
    • 2
この回答へのお礼

回答ありがとうございます。
提示していただいたコードで、欲しい結果が得られました。
このとき、クラスBのvirtualはなくても大丈夫なようですね。
本当にありがとうございます。

お礼日時:2012/06/07 17:21

A::aaa の中で出力する.

    • good
    • 0
この回答へのお礼

回答ありがとうございます。
おっしゃる通り、その方法が手っ取り早いです。
ただ、実際にやりたい事は、「this is bbb」という出力の代わりに、莫大なコードを加えたいのです。
Aという元のコードはあまり変更せずに、機能を拡張したいと思ってます。
その辺りを、説明したつもりだったのですが、伝わっていなかったらすみません。

お礼日時:2012/06/07 17:27

継承すれば良いんじゃないの?ってのはダメなのですか?

    • good
    • 0
この回答へのお礼

回答ありがとうございます。
既に、クラスBはクラスAを継承していますが。
おっしゃられている意味は、クラスAがクラスBを継承すれば良い、ということでしょうか?

お礼日時:2012/06/07 19:07

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人はこんなQ&Aも見ています


このQ&Aを見た人がよく見るQ&A