VC++でプログラミングをしています。
A(基本クラス)
B(派生クラス)
を作成しました。Bは、Aの特別な場合です。
このとき、基本クラスAのポインタから、派生クラスBにのみあるメンバ関数を呼ぶことはできないのでしょうか?
基本クラスAにも同じ名前の関数があれば、仮想関数をオーバーロードすれば呼び出せるようですが、この関数は、基本クラスには不要なので、できれば使わないメンバ関数を基本クラスに書きたくありません。
(純粋仮想関数という方法もあるようですが、)
操作としましては、
Aのポインタ配列 A* a[100]を作成し
特別な場合のみ派生クラスBのメンバ関数だけを実行させたいのです。
派生クラスにのみあるメンバ関数を、Readとします。
for(i=0;i<100;i++){
if(派生クラスBの場合){
a[i]->Read()
}
}
現状では、コンパイルエラーで、
関数Readは、aのメンバ関数ではありませんとなってしまいます。
以上よろしくお願いします。
No.2ベストアンサー
- 回答日時:
>この関数は、基本クラスには不要なので、
>できれば使わないメンバ関数を基本クラスに書きたくありません。
その動機付けがよくわからないのですが、もう少し具体的な話があれば補足にどうぞ。
>for(i=0;i<100;i++){
> if(派生クラスBの場合){
> a[i]->Read();
> }
>}
これだけ見ると、基底クラス A に何もしない仮想関数 A::Read() を用意して、
これを派生クラス B でオーバーライドすれば if 文不要で
for ( i = 0 ; i < 100 ; i++ ) {
a[i]->Read(); // a[i] が派生クラス B を指すときのみ Read()が意味のある処理をする
}
となるから、そちらの方が(効率はさておき)優れていると思いますけど。
ご教示ありがとうございました。ご連絡が遅くなって大変申し訳ありません。非常によく分かりました。基本クラスに仮想関数を作成する方法で行ってみます。どうもありがとうございました。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- その他(プログラミング・Web制作) pythonのプログラムについての質問です。 1 2023/05/26 10:31
- Excel(エクセル) 別シートに毎回異なるデータをコピーする 7 2022/06/24 09:02
- C言語・C++・C# C言語プログラム変更 2 2022/12/21 15:03
- 予備校・塾・家庭教師 駿台。高三のクラス選択について。 駿台模試の数学偏差値が60あるので一応物理の難関クラス認定は貰って 1 2023/04/03 17:00
- Excel(エクセル) Excelで全クラスのランキング表を作成したい 4 2022/05/24 15:28
- その他(プログラミング・Web制作) どういうプログラムで組みますか?google colabでやってるんですけど、出来る方お願いします。 1 2022/07/17 18:41
- 高校 高校1年生です。来年のクラスを特進にするか総合にするかで迷っています。 総合は(論表or数学研究)か 1 2022/11/11 07:03
- 学校 昔、中学生の頃は同じクラスでもたいていおとなしい組とやんちゃ組、優等生組、その他謎の少数派の4タイプ 2 2023/02/09 14:30
- 高校 テスト勉強について 中間テストの結果がかえってきたのですがあまりよくありませんでした。 現代の国語と 2 2023/06/05 00:46
- JavaScript オブジェクト配列の各メンバを任意の式で評価して、その評価値が最大のオブジェクトを返す関数はありますか 2 2023/05/20 15:02
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
既定のコンストラクタがない?
-
DebugクラスとTraceクラスの違い
-
WindowsAPIのリストビューの...
-
(UWSC) 「#32770」の意味わかり...
-
VB.NETでのEnumの使用について
-
MFCアプリのコマンドラインでパ...
-
FriendとPublicの違い。。。
-
ダイアログ表示時にチェックボ...
-
ダイアログクラスのコントロー...
-
DataGridViewのセルに斜線を引...
-
エディットコントロールでEnter...
-
C++/CLIからC++の呼び出しで例外
-
C#のクラス設計について教えて...
-
クラスのアドレスを引数として...
-
イベントにAddHandlerされてい...
-
CMainFrameクラスの使い方
-
DataContextについて
-
このコンパイルエラーの意味に...
-
【MFC】ユーザインタフェースス...
-
ソケットを使った「非同期」通...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
FriendとPublicの違い。。。
-
既定のコンストラクタがない?
-
(UWSC) 「#32770」の意味わかり...
-
クラスのアドレスを引数として...
-
ダイアログ表示時にチェックボ...
-
イベントにAddHandlerされてい...
-
【ASP.NET】 独自で作成したク...
-
MFCアプリのコマンドラインでパ...
-
DebugクラスとTraceクラスの違い
-
ボタンのオーナードローについて
-
OnInitDialog()の関数の組み込み方
-
IncludeではなくClassで宣言す...
-
関数の呼び出し元の検索
-
このコンパイルエラーの意味に...
-
C++ protectedにアクセス不可
-
C++で継承元のクラスの代入演算...
-
DataGridViewのセルに斜線を引...
-
C#で通常のbuttonコントロール...
-
エディットコントロールのイベ...
-
CMainFrameクラスの使い方
おすすめ情報