プロが教えるわが家の防犯対策術!

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 とだけ書いてあるパターンの意味を教えて頂けないでしょうか.
どうかよろしくお願い致します.

A 回答 (4件)

「『Func(arg1, arg2)』という名前のクラスはあり得ません.」と書いて「あっ」と思ったんだけど, Class に対しては


Class という引数付きのマクロが定義されていて, それを展開するとなんらかのクラスの名前になる
という可能性はある.

かなり変態ではあるけど.

Func の方は
Func *func1;
と使ってるからその可能性はなさそうだけど, これもなくはないんだよな~. Func の方で検索した方が早い... かな?
    • good
    • 0
この回答へのお礼

ご助言を頂き有難うございます.Class がマクロで定義されていると仮定して
 std::cout << TO_STRING(Class) << std::endl ;
で名前を書き出してみましたところ,
 Func1
となりました.また,Func1 は Func の派生クラスであることも分かりました.
これまでに頂いたコメント内容がつながりました.

マクロ定義の方は少し複雑なようで,まだ理解できていないのですが.
とりあえず一段落です.的確なアドバイス,大変ありがとうございました.

お礼日時:2017/11/24 21:48

func1 = new Class(arg1, arg2) ;



単純にClass型のコンストラクタを呼んでインスタンスを
作っているだけ。

Class型は予約語classとは無関係で有ることに注意。

どういうコードを呼んでいるのかわかりませんが、これを
大前提に読むように。

Funcとの関わりは千里眼を持ち合わせていないのでわかりません。
    • good
    • 0
この回答へのお礼

ご指摘頂きまして,大変有難うございました.
Func については仰る通り,コメントは難しいですよね. ”Class” という名前のクラスの定義を検索したのですが
見つけることが出来ませんでしたので,この名前に何か特別な意味があるのかな,とも思ったのですが
そうではないとのこと.大変勉強になりました.

お礼日時:2017/11/23 13:31

C++ では大文字と小文字を区別します. つまり「class」と「Class」は別物です.



func1 = new Class(arg1, arg2) ;
では, 右辺の
new Class(arg1, arg2)
で「Class という名前のクラス」のオブジェクトを生成し, そのアドレスを左辺の
func1
に代入しています. そしてこの左辺の変数が
Func *func1;
と宣言されているなら,上の代入が成功するためには
Class は Func の導出クラス
でなければなりません.

あと「事前にクラス Func(arg1, arg2) が宣言されていて」は文章が変です. 「Func(arg1, arg2)」という名前のクラスはあり得ません.
    • good
    • 0
この回答へのお礼

Class が Func の導出クラスでなければならないとのご助言,プログラムの理解の助けになりそうです.
grepでソースコードの "Class" の文字列を検索しても,その名前で直接にクラスを定義しているところは見つかりませんでしたので
どこか別の形で作られていないか,もう一度コードを見直してみようと思います.
重ねてのご回答,大変有難うございました.

お礼日時:2017/11/23 13:20

(1) でも, new の後にクラスの名前はちゃんと書いてありますよね.



「Class」って.
    • good
    • 0
この回答へのお礼

早速のお返事,大変有難うございました.
仰っているのは「Func は関係なく Class という名前のクラス」ということなのでしょうか..

お礼日時:2017/11/22 17:37

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!