
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も見ています
-
静的でないメンバ関数の呼び出しが正しくありません
C言語・C++・C#
-
他の.CPPファイルに定義した関数を呼び出す方法について
C言語・C++・C#
-
複数のクラスで共通した関数を使いたい場合
C言語・C++・C#
-
-
4
CStringからchar*への型変換について教えてください。
C言語・C++・C#
-
5
画面を強制的に再描画させる方法
C言語・C++・C#
-
6
std::stringからLPCWSTR型への変換
C言語・C++・C#
-
7
【C++クラス設計】ある関数の引数に、他のクラスのメンバ関数を呼び出す方法【教えて下さい】
C言語・C++・C#
-
8
charからLPTSTRへの変換方法
C言語・C++・C#
-
9
DWORDの実際の型は何でしょうか
C言語・C++・C#
-
10
CStringの文字列検索&抜き出しについて
C言語・C++・C#
-
11
外部シンボル ~~"は未解決ですというエラーが直らない"
C言語・C++・C#
-
12
VC++スレッドの正しい終了のさせかた
C言語・C++・C#
-
13
ダイアログをスクロールさせるには
C言語・C++・C#
-
14
CString型 全角半角を意識せずに「1文字」ずつ取り出す
C言語・C++・C#
-
15
スレッドの安全な終了のさせ方
C言語・C++・C#
-
16
適切な変換関数が存在しない???
C言語・C++・C#
-
17
CString から LPCTSTRの型に変換
C言語・C++・C#
-
18
エディットコントロールでEnter押した時の動作
C言語・C++・C#
-
19
スレッドの終了の仕方
C言語・C++・C#
-
20
テキストボックスからフォーカス外す
C言語・C++・C#
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
範囲外の数値を代入したらエラ...
-
C++のテンプレート関数やテンプ...
-
エクセルVBAで、条件に一致する...
-
変数名の付け方
-
(vba)他のアプリケーションの右...
-
複数の変数を宣言する時、同時...
-
PHPExcel使用で2枚目のシートを...
-
vb.netでFAXを送信する方法
-
オブジェクトレベルとメタレベル
-
恋愛
-
VBAもしくはVB6:クラスの中で...
-
SwingとEDT(イベントディスパッ...
-
標準モジュールとクラスモジュ...
-
コマンドプロンプト実行後に画...
-
僕の出身中学校は200人同級生が...
-
ODBCでMoveNextがうまく動作し...
-
重複エラーを解決するには
-
ATLとMFCの違いは何でしょうか?
-
インスタンス参照でアクセスで...
-
VB.NETのSendMessageを教えてく...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
クラス間でのデータ参照
-
関数内の変数に<summary>コメン...
-
javaでメインクラスが見つから...
-
範囲外の数値を代入したらエラ...
-
C#にて別クラスの関数を使いたい
-
a href="..." とServlet
-
無名パッケージからのインポート
-
visual studioのデザイナ画面で...
-
import と extends について
-
Java リフレクションについて
-
C#のクラスライブラリでメッセ...
-
C# インターフェイスの実装
-
親クラスから子クラスへアクセス。
-
c++,ある関数のクラスから別の...
-
Java
-
構造 他のクラスの構造体を別...
-
C++で親クラスの関数を呼び出す...
-
C++でfriendクラスにしているの...
-
java-別クラスの変数の使い方を...
-
下記のコードを実行すると、Mai...
おすすめ情報