VC++のコーディングについて

このQ&Aのポイント
  • VC++初心者のためのWindowsフォームアプリケーションのコーディング方法
  • VC++でのWindowsフォームアプリケーションの作成方法について
  • VC++のコーディングにおけるヘッダーファイルとcppファイルの役割と違い
回答を見る
  • ベストアンサー

VC++のコーディングについて

VC++初心者です。 VC++のWindowsフォームアプリケーションを使用してテストプログラムを作ってみようと思っています。 初歩的な質問ですみません。 VC++でWindowsフォームアプリケーションを作成する場合、 フォームのヘッダーファイル(Form.h)にコーディングしていくものなのでしょうか? ボタンクリック処理など、ヘッダーファイルに作成されてしまいます。 私の先入観で、cppファイルにコーディングするものだと思っていたのですが、 VC++のWindowsフォームアプリケーションとは、こういうものでしょうか? ヘッダーファイルにコーディングするという感覚が何だか気持ち悪いです。 また、VC++を使用してWindowsアプリケーションを作る勉強がしたいのですが、 「初心者でも分かる+オススメの参考書籍」がありましたら、教えていただけると幸いです。 基本的な質問で意味不明かもしれませんが、ご回答いただけると助かります。 よろしくお願いします。

質問者が選んだベストアンサー

  • ベストアンサー
回答No.2

> 私の先入観で、cppファイルにコーディングするものだと思っていたのですが、 > VC++のWindowsフォームアプリケーションとは、こういうものでしょうか? VC++が自動的に吐くコードがC++の標準(つか規範)である「宣言はヘッダ/実装はcpp」に反しているだけです。 ヘッダ内に書かなければいけないなんてルールはどこにもありません。 > ヘッダーファイルにコーディングするという感覚が何だか気持ち悪いです。 僕も嫌いです。反吐が出ます。 なのでVC++が吐いたコードの宣言部だけ残し、実装はcppに移しています。

prapragma
質問者

お礼

epistemeさんへ ご回答ありがとうございます。 的確なアドバイスありがとうございます。 実際に宣言部だけヘッダに残して、実装をcppに移そうと思ったのですが、 どの部分を残して、どの部分を移せば良いのか分かりませんでした。 お時間ある時で構いません。 何か具体的ソースコードを一例にご教示いただけると幸いです。 「フォーム上にボタン1つで、ボタンクリックするとラベルのテキストが変わる」などの 簡単を例にしていただけると助かります。 お手数をお掛けして申し訳ございませんが、よろしくお願いします。

その他の回答 (5)

  • zwi
  • ベストアンサー率56% (730/1282)
回答No.6

少なくともC++初心者がVC++のフォームアプリ(C++/CLI)を作るのは止めた方が良いと思います。止む終えない事情があれが別ですが。 私は、VC++のフォームアプリはC++の熟練者が.NetFrameWorkを使って容易にウィンドウをアプリを構築するためのものと思っています。 C++とC++/CLIの文法の違いやクラスの何とかも分からない人がやるには難しすぎると思うのですが、prapragmaさんはC++には慣れておられるのでしょうか?

prapragma
質問者

お礼

zwiさんへ ご回答ありがとうございます。 恥ずかしながらC言語しか分からず、C++も初心者です。 いきなりハードルの高いものに飛びついてしまいました(汗) まずは、C++から勉強したいと思います。 的確なアドバイスありがとうございます。

回答No.5

#1です。 > #3 >ヘッダに実装を書くと実装に変更を加えるたびにそれをinclude >しているすべてを再コンパイルしなければならなくなります。 それは知ってるけど、システムのトップ階層(メインフォーム)なら、 includeされることが無いからどっちでもいいと思うけど? GUIアプリケーションのメインフォームは汎用性無いことが多いですし。 ・・・とは言っても実は私も分けています(^ ^; Builder使うこと多いですし。

回答No.4

> 何か具体的ソースコードを一例にご教示いただけると幸いです。 僕はフォームに関わる部分にC++/CLIを使いません。 C#の方が楽ですからから。 C++の方が書きやすい部分をC++/CLIで書き、 C#から呼び出しています。

回答No.3

> 定義と実装を一つのヘッダ".hpp"で管理することがよくあります。 とんでもない、原則「やっちゃダメ」です。 ヘッダに実装を書くと実装に変更を加えるたびにそれをinclude しているすべてを再コンパイルしなければならなくなります。 宣言と実装を分離するのがC++の流儀です。 # 唯一の例外がtemplate

回答No.1

ヘッダ".h"と実装".cpp"に分けた場合、 同じインターフェースなのに二つのファイルを管理するようになります。 C++ではクラス構造が複雑なこともあるので、面倒です。 なので定義と実装を一つのヘッダ".hpp"で管理することがよくあります。 また、テンプレートは定義と実装を一つのヘッダに書かないと、 コンパイルできません。

prapragma
質問者

お礼

ICE FALCONさんへ ご回答ありがとうございます。 テンプレートやクラスについても知識不足なので、勉強してみます。 ありがとうございました。

関連するQ&A

  • VC++2010での開発について

    『Microsoft Visual C++ 2010 Express』をインストールして、 Windowsアプリケーションを作成したのですが・・・ 初期作成されたヘッダファイル(Form1.h)にいろいろとコードがかかれていました! 昔(VC6)時代が最後だったので少しびっくりしたのですが、 cppファイルに書いていたような内容がhファイルにあるので?となり質問しました。 質問内容 1..NETになってからは、hファイルにイベントやコンストラクタなどの処理は記述するものなのでしょうか? 2.新規関数を作成する場合はどうするの? 3.VC++ 2010を勉強するにあたって、参考になる『本』『サイト』はありますでしょうか? よろしくお願いいたします。

  • VC++  Windowsアプリケーション作成

    【VC++ 2005 ExpressEdition】使用 ●今回、上記の環境を用いて簡単なWindows用ツールでも作成しようと思っております。  実際起動し、新しいプロジェクトの開始で、Windowsフォームアプリケーションを選択したのですが、初めから様々なcppファイルやらヘッダファイルがあり、プログラムもすでに大量に書かれていてどこにWinMainがあり、どこから書いていけばよいのか分かりません。 試しにボタンをフォームデザインで作成し、ダブルクリックによりイベントを作成してみたのですが、 private: System::Void button1_Click(System::Object^ sender, System::EventArgs^ e) このような文が表示されました。 過去にBolandの開発環境を使い1からウィンドウを作成したことがあり、BN_CLICKEDなどのメッセージが使われるのだろうと思っていたのですが全く意味が分かりませんでした。参考書やサイトに書いてあるプログラムもどこに書いてよいのか分かりません。 VC++でのWindowsアプリケーションの作成時の使い方をどなかた教えていただけないでしょうか。 尚、VC#、VBでのWindowsアプリケーション作成、C++でのWinAPIについては、かじった程度の経験はあります。

  • VC++でラベルに表示できない[.NET]

    VC++でラベルに表示できない[.NET] 以下のプログラムですがエラーが出ます。 #include "stdafx.h" #include "Form1.h" using namespace CursorXY1; [STAThreadAttribute] int main(array<System::String ^> ^args) { static POINT Point; // コントロールが作成される前に、Windows XP ビジュアル効果を有効にします Application::EnableVisualStyles(); Application::SetCompatibleTextRenderingDefault(false); // メイン ウィンドウを作成して、実行します Application::Run(gcnew Form1()); label1->Text="これはラベルです"; return 0; } エラー内容: 1>.\Form1.cpp(27) : error C2065: 'label1' : 定義されていない識別子です。 1>.\Form1.cpp(27) : error C2227: '->Text' : 左側がクラス、構造体、共用体、ジェネリック型へのポインタではありません。 1> 型は ''unknown-type'' です。 ヘッダーファイルに「Form1.h,resource.h,stdafx.h」があります。 Designerでlabel1を設置しました。 Windowsフォームアプリケーションを選択しました。 初心者ゆえにずっとつまいずいていて、このたび質問させていただくことになりました。 よろしくお願いします。

  • 【VC++2005】ソースの書き方:コーディングを****.hのファイルに書いてもいいでしょうか?変数名の命名規則はありますか?

    VC++2005の超超初心者です。 現在、VC++2005(Express Edition)でCLRでプロジェクトを つくり、いろいろとコーディングしています。 今まで、参考書「作って覚えるVisual C++ 2005 Express Editon」 を利用して、半分泣きながらコーディングしていました。 その参考書では、コーディングを*****.cppでなく、 ****.hのファイルにすべて書いているのですが、いいものでしょうか? 先輩が残していったVC++6.0のソースを見ると、cpp内に書いていますが どちらがよろしいでしょうか? また、他の参考書を見ると、変数名の先頭に「m」をつけていますが、 何か意味があるのでしょうか? (変数名をつける時の作法ってありますか?) せっかくなら、きれいなソースを書きたいと思うので、 詳しい方いましたら、ご教授頂きたく思います。

  • 初心者です。VisualStudioについて教えてください。(C++)

    初心者です。VisualStudioについて教えてください。(C++) VisualStudioのWindowsフォームプロジェクトを作成すると 「Form1」という簡易画面が自動で作成されます。 その画面にボタン等を追加していくと、そのボタン押下時の処理が 「Form1.h」にどんどん追加されていきます。 なぜヘッダファイルに処理の実装を記述していくのでしょうか? 基本的に、ヘッダとは関数やクラスを定義するだけのもので 実装はcppファイルに記述していくものだと研修等で教わったのですが。 なぜなのでしょう? ご教授下さい。 また、「Form1.h」ではなく「*.cpp」ファイルに実装を記述したい場合 どうのようにすればよいのでしょうか?

  • VC++(VS)でコンソールアプリ(複数ファイルからなる)を作成したい

    マイクロソフト社のVC++(Visual Studio 2008)で コンソールアプリケーションを作成しようとしております。 ファイルは複数ファイルからなり、 mainprogram.cpp -> 実行ファイル(mainprogram.exe) subprogram1.cpp -> オブジェクトファイル(subprogram1.obj) subprogram2.cpp -> オブジェクトファイル(subprogram2.obj) ・・・以下続く のように 1)サブプログラムをobjファイルとしてコンパイル 2)メインプログラムをコンパイルしてobjファイルとリンクし、   実行ファイルを作成する というような作業を行いたいと考えております。 以前はLinuxの環境でg++、makeを利用して このような構成のコンソールアプリケーションを作成しておりました。 が、VCに移行するに当り、どのようにプロジェクトファイル等を 構成して良いか分からず、出だしでつまづいております。 VCにもコマンドラインでコンパイルする方法 (cl, nmakeを使うんでしょうか。。。)があるみたいですが、 これらの手法について書かれている 書籍、サイト等を探すことが出来ないでおります。 VCに関して、このような使用法に対する解説がなされている書籍、 もしくはサイト等をお教え願えませんでしょうか? 宜しくお願い申し上げます。

  • VC++でCORBAを使用するには

    VC++でCORBAを使用する方法がわからなくて困っています。 idlをコンパイルしてできたxxxC.CPPというファイルをSourceFilesに追加してリビルドをかけると、「fatal error C1010: プリコンパイル済みヘッダーの検索中に予期しない EOF を検出しました。」というエラーがでます。 初心者のため、やり方があっているのかどうかもわからない状態です。

  • VC++2010Express デザイン画面

    VC++初心者です。 まず、Formのデザイン画面に、部品を配置し、ダブルクリックしてコードを記述していきますね。子フォームなどの場合も、デザイン画面をまず作り(この表現でいいのか?)、ダブルクリックしてコードを記述していきます。 デザイナウインドウを誤って閉じてしまったときの、復旧のさせ方がわかりません。上に~.cpp、Form1.h、Form1.h[デザイン]などが並びますが、[デザイン]の後ろの×をクリックして消してしまった時です。 ファイルを開くで、例えばForm1hなどを開いても、デザインは開いてくれません。どうすれば?

  • 【VC++2005(CLR)】子フォームから親フォームにデータを渡したい

    いつも大変お世話になっております。 VC++初心者です。 現在、VC++2005、CLRプロジェクト(C++/CLI)で コーディングしています。 早速ですが、質問させて下記の内容について 質問させてください。 現在、Form1.hからForm2.hをモーダルで呼び出しています。 Form2.h終了時に、Form2.hで保持していたデータをForm1.hに 渡したいのですが、どのようにしたら宜しいでしょうか ※中間ファイルを作って、データ渡しはしない方法でお願いします。  

  • VC++についてエラーC3673の解決方法

    初めてアプリケーションの開発をしている初心者です。 VC++2010のwindowsフォームアプリケーションを使ってアプリケーションの開発をしています。 Form1に配置したbutton1を押すと、Form2がモーダルな状態で実行されるようにしたくて、以下のようなプログラムを書いたのですが、エラーが出てしまいました。 自分でも少し調べてみましたが、解決法がよくわかりません。 private: System::Void button1_Click(System::Object^ sender, System::EventArgs^ e) { Form2 f2 = gcnew Form2(); f2.ShowDialog(); } エラー error C3673: 'guiapp::Form2' : クラスはコピー コンストラクターを含んでいません Form2の中身に関しては、追加→新しい項目で作ってから手を加えていません。 よろしくお願いします。

専門家に質問してみよう