
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;
}
//------------------------------------------------------
No.3ベストアンサー
- 回答日時:
Aを極力触りたくないのであれば、あまりカッコよくありませんが、AがBを継承するではどうでしょうか?
提示コードを以下のように書き換えれば、とりあえず期待する動きはすると思います。
//------------------------------------------------------
class B {
public:
virtualvoid bbb();
};
//------------------------------------------------------
//------------------------------------------------------
class A: public B{
public:
void aaa();
};
//------------------------------------------------------
※ その他はそのまま
回答ありがとうございます。
提示していただいたコードで、欲しい結果が得られました。
このとき、クラスBのvirtualはなくても大丈夫なようですね。
本当にありがとうございます。
No.2
- 回答日時:
A::aaa の中で出力する.
回答ありがとうございます。
おっしゃる通り、その方法が手っ取り早いです。
ただ、実際にやりたい事は、「this is bbb」という出力の代わりに、莫大なコードを加えたいのです。
Aという元のコードはあまり変更せずに、機能を拡張したいと思ってます。
その辺りを、説明したつもりだったのですが、伝わっていなかったらすみません。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
このQ&Aを見た人はこんなQ&Aも見ています
-
【教えて!goo ウォッチ 人気記事】風水師直伝!住まいに幸運を呼び込む三つのポイント
記事を読む>>
-
他の.CPPファイルに定義した関数を呼び出す方法について
C言語・C++・C#
-
クラスのアドレスを引数として渡したい
C言語・C++・C#
-
複数のクラスで共通した関数を使いたい場合
C言語・C++・C#
-
4
DWORDの実際の型は何でしょうか
C言語・C++・C#
-
5
【C++クラス設計】ある関数の引数に、他のクラスのメンバ関数を呼び出す方法【教えて下さい】
C言語・C++・C#
-
6
適切な変換関数が存在しない???
C言語・C++・C#
-
7
1 つ以上の複数回定義されているシンボルが見つかりました
C言語・C++・C#
-
8
【gcc・cygwin】multiple definitionエラーの解決法
C言語・C++・C#
-
9
構造 他のクラスの構造体を別のクラスで使いたい。
C言語・C++・C#
-
10
CStringからchar*への型変換について教えてください。
C言語・C++・C#
-
11
エディットボックスの入力制限について
C言語・C++・C#
-
12
charからLPTSTRへの変換方法
C言語・C++・C#
-
13
読み込み中にアクセス違反が発生しました、と出ます。これを回避することは
C言語・C++・C#
-
14
C++言語で、構造体のコピーは可能(しても良い)のでしょうか?
C言語・C++・C#
-
15
既定のコンストラクタがありません。というエラーについて
C言語・C++・C#
-
16
char str[256]の256の意味は?
C言語・C++・C#
-
17
<unistd.h>をVisualStudioでつかえるようにする
C言語・C++・C#
-
18
既定のコンストラクタがない?
C言語・C++・C#
-
19
静的でないメンバ関数の呼び出しが正しくありません
C言語・C++・C#
-
20
Debug Assertion Failed?
C言語・C++・C#
関連するカテゴリからQ&Aを探す
このQ&Aを見た人がよく見るQ&A
人気Q&Aランキング
-
4
ひとつのファイルにクラスは1つ?
-
5
クラス間でのデータ参照
-
6
関数内の変数に<summary>コメン...
-
7
親クラスから子クラスへアクセス。
-
8
別ファイルのclassの読み込みに...
-
9
Java
-
10
SwingでgetContentPaneのエラー...
-
11
java-別クラスの変数の使い方を...
-
12
範囲外の数値を代入したらエラ...
-
13
C# 子->親の通知にBeginInvoke...
-
14
C++ クラス名の前のdefine
-
15
Java リフレクションについて
-
16
キャストについて教えてください
-
17
ASP Pageの孫継承のPage_Load
-
18
C# log4netの使い方
-
19
エクセルVBAで、条件に一致する...
-
20
Excelで =EMBED("Acrobat Docu...
おすすめ情報
公式facebook
公式twitter