
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#
-
CStringからchar*への型変換について教えてください。
C言語・C++・C#
-
静的でないメンバ関数の呼び出しが正しくありません
C言語・C++・C#
-
-
4
画面を強制的に再描画させる方法
C言語・C++・C#
-
5
CString型 全角半角を意識せずに「1文字」ずつ取り出す
C言語・C++・C#
-
6
他の.CPPファイルに定義した関数を呼び出す方法について
C言語・C++・C#
-
7
Enterキーを押されたら次の処理に移るという事をしたい。
C言語・C++・C#
-
8
std::stringからLPCWSTR型への変換
C言語・C++・C#
-
9
【C++/CLI.NET】コンボボックスの値の設定・取得
C言語・C++・C#
-
10
構文エラー;"が型の前にありませんとは、どうしたら解決できるのですか。"
C言語・C++・C#
-
11
【C++クラス設計】ある関数の引数に、他のクラスのメンバ関数を呼び出す方法【教えて下さい】
C言語・C++・C#
-
12
CString から LPCTSTRの型に変換
C言語・C++・C#
-
13
CString型の文字列連結について
C言語・C++・C#
-
14
変数名の付け方
Java
-
15
ラベル(スタティックテキスト)内での改行。
C言語・C++・C#
-
16
C++でvectorにテキストファイルを読み込む
C言語・C++・C#
-
17
LRESULTとHRESULT
C言語・C++・C#
-
18
DWORDの実際の型は何でしょうか
C言語・C++・C#
-
19
構造体のメンバをfor文で回したい
C言語・C++・C#
-
20
CStringの文字列検索&抜き出しについて
C言語・C++・C#
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
関数内の変数に<summary>コメン...
-
c++,ある関数のクラスから別の...
-
C++ シングルトン マルチスレッド
-
Java リフレクションについて
-
クラス間でのデータ参照
-
dllエクスポート時のdeclspec(d...
-
ヒグマを撃退
-
「タイプ初期化子が例外をスロ...
-
インスタンス参照でアクセスで...
-
Java初級 引数に適用できません
-
クラスのインスタンス名をクラ...
-
そんなにお金がなくても年に1度...
-
C#において、同じインスタンス...
-
VBAもしくはVB6:クラスの中で...
-
(vba)他のアプリケーションの右...
-
Javaでのデバッグコード削除
-
private static という変数の修飾
-
ASP.Net ObjectDataSource4
-
C#でオブジェクトの有無を取得する
-
String.containsの反対機能はあ...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
クラス間でのデータ参照
-
関数内の変数に<summary>コメン...
-
C#にて別クラスの関数を使いたい
-
無名パッケージからのインポート
-
c++,ある関数のクラスから別の...
-
Java リフレクションについて
-
a href="..." とServlet
-
範囲外の数値を代入したらエラ...
-
構造 他のクラスの構造体を別...
-
C#のクラスライブラリでメッセ...
-
Java
-
継承したクラス側のクラス名の取得
-
import と extends について
-
C++でfriendクラスにしているの...
-
java-別クラスの変数の使い方を...
-
visual studioのデザイナ画面で...
-
C#でほかのファイルにある自作...
-
VisualC++でクラスのヘッダーフ...
-
型Containerのメソッドadd(S...
-
ASP Pageの孫継承のPage_Load
おすすめ情報