質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
C++

C++はC言語をもとにしてつくられた最もよく使われるマルチパラダイムプログラミング言語の1つです。オブジェクト指向、ジェネリック、命令型など広く対応しており、多目的に使用されています。

Q&A

解決済

1回答

2079閲覧

VC++でプログラミングをする際のクラスの扱いについて…

KHKou2

総合スコア14

C++

C++はC言語をもとにしてつくられた最もよく使われるマルチパラダイムプログラミング言語の1つです。オブジェクト指向、ジェネリック、命令型など広く対応しており、多目的に使用されています。

0グッド

0クリップ

投稿2015/05/17 03:03

私は、普段プログラミングをする際には、Javaでプログラミングをしています。
最近VisualStudio C++を使うようになったのですが、今までEclipseでJavaのプログラミングをしていたせいか、いまいちVisualStudio のクラスやらプロジェクトやらの仕組みがいまいち分かりません。

Eclipseでは、まずプロジェクトを作って、その中にsrcフォルダを作って、その中にパッケージを作って、その中でクラスを宣言しました。また、クラスを複数作りたいときは、また別のクラスをパッケージの中に作っていました。

しかし、VisualStudioでは、プロジェクトの中にたくさん.cppファイルを作るとバグるときがあります。なぜなのでしょうか?main関数が一つしか作れないのと関係があるのでしょうか?またmain関数が記された.cppファイルと違う.cppファイルでクラスを宣言した時どのようにしたら違うファイルで宣言したクラスを使えるようになるのでしょうか。

詳しく解説していただけると嬉しいです。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

>しかし、VisualStudioでは、プロジェクトの中にたくさん.cppファイルを作るとバグるときがあります。

バグる、というのがVisualStudioが動作を停止してしまうのか、作成したプログラムにバグが入るのかあいまいなのですが、私の経験からはVisualStudioが動作を停止してしまうことは割とよく見かけるので、こちらのことだとして説明します(逆にcppが多いからと言って、ビルドした実行ファイルに不具合があることはまずありえません)。

VisualStudioではインテリセンスという機能があって、プロジェクト内のソースコードすべての情報(クラス、関数、変数などの情報)をデータベース化して、入力途中に候補を選択できるようにしたり、ソース内で使用されている場所から宣言部、実装部にジャンプしたりすることができます。ただ、この情報を収集する作業を行っている途中別の操作をしたときに時々不整合を起こすのか、IDEが応答しなくなって落ちることがあります。おそらく今回の現象はこのことを指摘されているのだと思います。

これはもうVisualStudioの持つ持病みたいなもので、長く使っていると「またか」レベルの現象になりますので、こまめにセーブするなど対症療法を身に着けるしかないと思います。

>またmain関数が記された.cppファイルと違う.cppファイルでクラスを宣言した時どのようにしたら違うファイルで宣言したクラスを使えるようになるのでしょうか。

JavaだとImportで別モジュールのクラスを使えるようにしますが、C++だとクラス宣言が記述されているhファイル(ヘッダーファイル)を#includeという宣言で取り込みます。Javaだとjavaファイルにクラスの宣言およびその実装を記述しますが、c++はhファイルにクラスの宣言(メンバ関数は宣言のみ)、cppファイルにメンバ関数の実装を記述します。別のcppファイルでそのクラスを使用した場合、

lang

1(hoge.h内) 2class Hoge { 3 void func(); 4}; 5 6(hoge.cpp内) 7#include "hoge.h" 8void Hoge::func() 9{ 10 // 処理 11 : 12} 13 14(main.cpp内) 15#include "hoge.h" 16 17int main(int argc, char argv[]) { 18 Hoge h; 19 h.func(); 20 : 21 : 22}

のように#include "hoge.h"とHogeクラスの宣言を取り込んで、Hogeクラスを使用することになります。なので、c++に置いてはcppにクラスの宣言+実装を記述するのではなく、hファイルとcppファイルに分ける必要があります。

Javaのようにcppにすべてを記述したい、というのであれば

lang

1#include "hoge.cpp"

とやってもできるとは思いますが、Javaのようにメンバ関数を全てインライン関数としてクラス宣言の中に記述する必要があるなど、あまりc++では褒められた方法ではありません。

投稿2015/05/17 05:13

KoichiSugiyama

総合スコア3041

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

KHKou2

2015/05/17 06:26

ありがとうございます。もしファイルを変えてクラスの宣言をしたいのなら、.hファイルの中で宣言するのが一番適しているという事でいいでしょうか?
KoichiSugiyama

2015/05/17 06:52

C++に関してい言えばおっしゃる通り、hファイルの中で宣言するのが普通です。ファイル1つで宣言と実装をする場合でもhファイルに書きます。cppファイルはメンバ関数の実装とか定数の定義なんかを書きます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問