C++の初心者です.new コマンドの使い方が分からず,大変困っております.
基礎的なことかもわかりませんが,どなたかアドバイスを頂ければ大変助かります.
あるコードを読んていて,
(1) func1 = new Class(arg1, arg2) ;
と書かれていました.
この時,事前にクラス Func(arg1, arg2) が宣言されていて
(2) Func *func1;
により *func1 が Func のオブジェクトになっていました.
この場合,(1)は
(3)func1 = new Func(arg1, arg2) ;
と同じになるのでしょうか?
以上(1)のように,newでメモリを確保する際に,newの後にクラスの名前がなく
単にclass とだけ書いてあるパターンの意味を教えて頂けないでしょうか.
どうかよろしくお願い致します.
No.4ベストアンサー
- 回答日時:
「『Func(arg1, arg2)』という名前のクラスはあり得ません.」と書いて「あっ」と思ったんだけど, Class に対しては
Class という引数付きのマクロが定義されていて, それを展開するとなんらかのクラスの名前になる
という可能性はある.
かなり変態ではあるけど.
Func の方は
Func *func1;
と使ってるからその可能性はなさそうだけど, これもなくはないんだよな~. Func の方で検索した方が早い... かな?
ご助言を頂き有難うございます.Class がマクロで定義されていると仮定して
std::cout << TO_STRING(Class) << std::endl ;
で名前を書き出してみましたところ,
Func1
となりました.また,Func1 は Func の派生クラスであることも分かりました.
これまでに頂いたコメント内容がつながりました.
マクロ定義の方は少し複雑なようで,まだ理解できていないのですが.
とりあえず一段落です.的確なアドバイス,大変ありがとうございました.
No.3
- 回答日時:
func1 = new Class(arg1, arg2) ;
単純にClass型のコンストラクタを呼んでインスタンスを
作っているだけ。
Class型は予約語classとは無関係で有ることに注意。
どういうコードを呼んでいるのかわかりませんが、これを
大前提に読むように。
Funcとの関わりは千里眼を持ち合わせていないのでわかりません。
ご指摘頂きまして,大変有難うございました.
Func については仰る通り,コメントは難しいですよね. ”Class” という名前のクラスの定義を検索したのですが
見つけることが出来ませんでしたので,この名前に何か特別な意味があるのかな,とも思ったのですが
そうではないとのこと.大変勉強になりました.
No.2
- 回答日時:
C++ では大文字と小文字を区別します. つまり「class」と「Class」は別物です.
func1 = new Class(arg1, arg2) ;
では, 右辺の
new Class(arg1, arg2)
で「Class という名前のクラス」のオブジェクトを生成し, そのアドレスを左辺の
func1
に代入しています. そしてこの左辺の変数が
Func *func1;
と宣言されているなら,上の代入が成功するためには
Class は Func の導出クラス
でなければなりません.
あと「事前にクラス Func(arg1, arg2) が宣言されていて」は文章が変です. 「Func(arg1, arg2)」という名前のクラスはあり得ません.
Class が Func の導出クラスでなければならないとのご助言,プログラムの理解の助けになりそうです.
grepでソースコードの "Class" の文字列を検索しても,その名前で直接にクラスを定義しているところは見つかりませんでしたので
どこか別の形で作られていないか,もう一度コードを見直してみようと思います.
重ねてのご回答,大変有難うございました.
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- C言語・C++・C# Cのオブジェクトファイルの逆アセンブル 5 2023/05/13 01:51
- 工学 Pythonの3次元描画に関する質問です 3 2022/12/07 20:07
- Visual Basic(VBA) ファイル全てを .xlsm に変更したところ、プログラムが途中で落ちてしまっています 17 2022/12/07 12:03
- Java java final 1 2022/06/10 22:49
- Java JavaのSingletonパターンのprivateの持つ意味が分かりません。 5 2022/06/12 10:38
- UNIX・Linux gawk 3 2022/08/18 14:07
- その他(プログラミング・Web制作) python flask から fastapiへの移行時のエラー対処 1 2023/02/05 12:26
- C言語・C++・C# クラスのメンバ変数を基準に並べ替えをしたい 5 2022/12/25 17:40
- Windows 10 IT初心者です! powershellで以下のようなエラーが出ました オブジェクト参照がオブジェクト 1 2023/05/17 11:30
- C言語・C++・C# C#のSystem.Windows.Media.Colorに関する質問です。 3 2022/05/18 11:51
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
CMainFrameクラスの使い方
-
このコンパイルエラーの意味に...
-
FriendとPublicの違い。。。
-
ダイアログクラスのコントロー...
-
ダイアログ表示時にチェックボ...
-
【C++】vectorについて
-
既定のコンストラクタがない?
-
(UWSC) 「#32770」の意味わかり...
-
VC++ リストボックスにデータを...
-
VB.NETでのEnumの使用について
-
DLLからEXEのクラスを呼び出す...
-
privateなメンバ関数をテストす...
-
VC++ Express m_hWnd
-
C#で、動的にサブクラスを取得...
-
Visual C++ 6.0 でクラス表示が...
-
MFCのドラッグ&ドロップについて
-
不要になった、普通の構造体の処理
-
MFCアプリのコマンドラインでパ...
-
クラスのアドレスを引数として...
-
ウィンドウの背景に画像を配置する
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
FriendとPublicの違い。。。
-
既定のコンストラクタがない?
-
イベントにAddHandlerされてい...
-
クラスのアドレスを引数として...
-
ダイアログ表示時にチェックボ...
-
(UWSC) 「#32770」の意味わかり...
-
エディットコントロールのイベ...
-
エディットコントロールでEnter...
-
WindowsAPIのリストビューの...
-
CMainFrameクラスの使い方
-
DebugクラスとTraceクラスの違い
-
MessageBoxを継承したい
-
C++ protectedにアクセス不可
-
MFCアプリのコマンドラインでパ...
-
このコンパイルエラーの意味に...
-
MFCのドラッグ&ドロップについて
-
【ASP.NET】 独自で作成したク...
-
派生クラスから基本クラスprote...
-
ダイアログクラスのコントロー...
-
C#で通常のbuttonコントロール...
おすすめ情報