C# と VB.NET の質問掲示板

ASP.NET、C++/CLI、Java 何でもどうぞ

C# と VB.NET の入門サイト

Re[6]: C++で演算子について教えてください


(過去ログ 15 を表示中)

[トピック内 8 記事 (1 - 8 表示)]  << 0 >>

■5196 / inTopicNo.1)  C++で演算子について教えてください
  
□投稿者/ あいこ (1回)-(2007/07/06(Fri) 13:54:37)

分類:[C/C++] 

VC++をはじめてまもなく、基本的なことで恐縮ですが、ご教示ください。
ある図書で
”CFormViewクラス(CViewクラス派生)にエディットボックスIDがIDC_EDIT1があります。
 このエディットボックスを認識するためには

CEdit* myED1=(CEdit*)GetDlgItem(IDC_EDIT1);

の記述をします。”
とあるのですが、なにをしているのか、よくわかりません。
"CEdit* myED1"は"CEdit *myED1"とおなじ意味ですか? (ポインタ変数なのですか?)
(CEdit*)とGetDlhItem(IDC_EDIT1)との関係はどうなのでしょうか?

いろいろ、MSDNやネットで調べてみたのですが、そこまで到達できません。
どなたか、ご教示ください。

引用返信 編集キー/
■5202 / inTopicNo.2)  Re[1]: C++で演算子について教えてください
□投稿者/ とっちゃん (160回)-(2007/07/06(Fri) 15:02:10)
とっちゃん さんの Web サイト
No5196 (あいこ さん) に返信
> "CEdit* myED1"は"CEdit *myED1"とおなじ意味ですか? (ポインタ変数なのですか?)
int* a;

int *a;
ならわかりますか?
見た目は異なって見えますが、どちらも同じです。

前者の書き方は、C++ 的な書き方、後者の書き方は C 的な書き方ともいわれますが、
はっきりいってしまえば単なる方言なのでどっちでも好きな書き方でOKですよ。

乱暴な言い方と思われるかも知れませんが

if( ... ){
}
と書くか
if( ... )
{
}
でどっちが正しいとかがないのと一緒です。


> (CEdit*)とGetDlhItem(IDC_EDIT1)との関係はどうなのでしょうか?
>
(CEdit*) はキャスト演算子というものです。
こちらについては、たぶんMSDNで探すと C# のものが引っ掛かると思います。

両方に言えることですが、どちらのことについても、プログラミングC++ などに載ってます。
もし読んだことがないのなら、一度読破しておくことをお勧めします。
#掲示板等で文字だけで説明を受けるよりよっぽどわかりやすいですよ。


で、一点だけ。
(CEdit*)GetDlgItem( IDC_EDIT1 );
ですが、

こちらはちょっとだけ注意が必要です。
C/C++のキャストは、型変換を無条件かつ強制的に行えるようになっているため
そのオブジェクトのさす実体がどのようなものであれ、変換できてしまいます。


ですが、本来オブジェクトが指し示すものが本当は何なのか?をきちんと把握できていること、
キャストの結果型が変わってしまうことでメモリイメージにどのような影響があるのかが把握できていること
の2点がわかっていない限り絶対に行ってはいけません。

もし、このあたりがよくわかんねーということであれば、ダイアログエディタで IDC_EDIT1 に CEditの
変数を割り当てて、その変数を利用してください。

引用返信 編集キー/
■5204 / inTopicNo.3)  Re[2]: C++で演算子について教えてください
□投稿者/ あいこ (3回)-(2007/07/06(Fri) 15:31:35)
"とっちゃん さん"様

ご教示いただきましてありがとうございます。

> (CEdit*) はキャスト演算子というものです。
> こちらについては、たぶんMSDNで探すと C# のものが引っ掛かると思います。

あいこ:早速、確認させていただきました・・・・・・

>
> 両方に言えることですが、どちらのことについても、プログラミングC++ などに載ってます。
> もし読んだことがないのなら、一度読破しておくことをお勧めします。
> #掲示板等で文字だけで説明を受けるよりよっぽどわかりやすいですよ。

あいこ:"プログラミングC++"はMSDN内にあるのでしょうか?検索しましたがみつかりません。
    お手数ですが、ご教示ください
    よろしく、お願いします

引用返信 編集キー/
■5205 / inTopicNo.4)  Re[3]: C++で演算子について教えてください
□投稿者/ 恣意の (12回)-(2007/07/06(Fri) 15:59:50)
# 何か、いまいち何処に対して質問しているのかわからんかったので...
# ずれた回答ならとばしてください


 ■No5196 (あいこ さん) に返信 

>このエディットボックスを認識するためには
             ~~~~
なんつーか、本文がこのままなら、これが誤解の元のような気もする
「このエディットボックスを"操作"するためには」ですね


ということで、以下の式を分解

CEdit* myED1=(CEdit*)GetDlgItem(IDC_EDIT1);

  ↓  ↓  ↓  ↓  ↓

CWnd*  myCtrl1 = GetDlgItem(IDC_EDIT1); // IDC_EDIT1ウィンドウのポインタを取得
CEdit* myED1 = (CEdit*)myCtrl1;         // IDC_EDIT1はエディットボックスなのでCEdit*型にキャスト


分解っつっても、これしかないわけだがw

ようは、エディットボックスを操作するには、
そのウィンドウを示すオブジェクトが必要なので
GetDlgItem(IDC_EDIT1)によって、ウィンドウオブジェクトのポインタを取得。

GetDlgItem()によって取得できるのはCWnd*型であり、
IDC_EDIT1はエディットボックスだと自分(書き手)でわかっているので
キャストによってCWnd*型をCEdit*型に強制的に認識させているだけです

# キャストすることによって、CEdit特有のメソッドが使用可能になる
# うはw書いててやっぱり的外れな気がしてしてきたw

引用返信 編集キー/
■5207 / inTopicNo.5)  Re[4]: C++で演算子について教えてください
□投稿者/ あいこ (4回)-(2007/07/06(Fri) 16:13:35)
2007/07/06(Fri) 16:23:42 編集(投稿者)
2007/07/06(Fri) 16:23:28 編集(投稿者)

"恣意の" 様


ご教示いただきましてありがとうござます。
VC++かじりはじめてよく、わかっていないのですが・・・

CWndなどはクラスで *をつけることでmyED1はポインタ変数と思いました。
クラスはオブジェクトの”設計書”という認識から異なるクラス(CWnd,CEdit)を
”変換”なのか、どうなのか、わからなかったのです。

"恣意の"様から"変換”ということなのですが、異なるクラスで変換するのは
建築中の家に違う家でつかう予定のドアを取り付けるようで・・・どうなのかな?と思いました。

クラスってなんだか、わからなくなってしまいました。
アドバイスをお願いします

引用返信 編集キー/
■5208 / inTopicNo.6)  Re[5]: C++で演算子について教えてください
□投稿者/ Blue (315回)-(2007/07/06(Fri) 16:44:54)
正直言っていいですかね?

「継承」はC++言語をやる上での基礎中の基礎です。
わからないのであれば、掲示板で0から理解するまでを聞くのは無茶というものです。

C++でメシを食っていくつもりであれば、それなりの教本やらを買って勉強したほうがいいです。

とりあえず、Googleとかで「C++ 継承」で検索すれば解説しているサイトはごろごろ出てきますので
それで勉強してみてください。


ちなみにお勧めは
http://www7b.biglobe.ne.jp/~robe/cpphtml/index.html

第2部 クラスを知ろう
です。
引用返信 編集キー/
■5209 / inTopicNo.7)  Re[3]: C++で演算子について教えてください
□投稿者/ とっちゃん (161回)-(2007/07/06(Fri) 16:53:45)
とっちゃん さんの Web サイト
No5204 (あいこ さん) に返信
> "とっちゃん さん"様
>
#さんに様はちょっとw


>>(CEdit*) はキャスト演算子というものです。
>>こちらについては、たぶんMSDNで探すと C# のものが引っ掛かると思います。
>
> あいこ:早速、確認させていただきました・・・・・・
>
個人的にはこの続きが知りたいのですが。
#わかったようなわからんようなでもいいのです。「なにを確認した」かが重要なのですよ。


> あいこ:"プログラミングC++"はMSDN内にあるのでしょうか?検索しましたがみつかりません。

「プログラミング C++ 第3版」という書籍です。
アマゾンのリンクを張っておきます。

http://www.amazon.co.jp/o/ASIN/475611895X/ref=s9_asin_title_1-1966_p/250-8702362-5615461?pf_rd_m=AN1VRQENFRJN5&pf_rd_s=center-2&pf_rd_r=0M36JQFMPPY1D6Z2PJDG&pf_rd_t=101&pf_rd_p=61605506&pf_rd_i=489986

ですね。

引用返信 編集キー/
■5210 / inTopicNo.8)  Re[6]: C++で演算子について教えてください
□投稿者/ あいこ (5回)-(2007/07/06(Fri) 16:55:15)
Blue様、"恣意の" 様、"とっちゃん さん"様

申し訳ありません・・・次々とわかなくなってしまって・・・
ご指示いただきましたHPにてひととおり、勉強しなおしてきます。

いろいろ、ご教示ありがとうございました。


解決済み
引用返信 編集キー/


トピック内ページ移動 / << 0 >>

このトピックに書きこむ

過去ログには書き込み不可

管理者用

- Child Tree -