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

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

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

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

C++

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

Q&A

解決済

5回答

4951閲覧

C++っぽい書き方とは

albacrow

総合スコア31

Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

C++

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

0グッド

3クリップ

投稿2015/04/17 11:55

先生にC++で書いたゲームのコードを見せたところ、Javaっぽい書き方していると言われました。
おそらく、1つのファイルにまとめすぎているのが原因だとは思います。
現在は先生が書いたコードを真似して直そうとしているのですが、C++の良い書き方、悪い書き方について教えていただけないでしょうか?

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

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

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

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

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

ozwk

2015/04/17 12:09

javaっぽいと言われたコードがどんなものか気になるので一部分貼ってもらえるとありがたいです。
albacrow

2015/04/17 12:21

すみません、コードを貼るのは遠慮したいので要点だけ書きます。 ・if文のブロックが3重4重になっている ・文が横に長い ・コピペが多い ・関数を分割しきれていない などが自分でも悪いとは考えています。
guest

回答5

0

ベストアンサー

C++でJavaっぽいコードというとむしろ褒め言葉のように感じるのは私だけなんでしょうか…

・if文のブロックが3重4重になっている
・文が横に長い
・コピペが多い
・関数を分割しきれていない

このあたりはJavaの特徴と合致するものではありません。
先生が何か先生の思うフィーリングみたいなものを言っただけかもしれません。
例えば昔、似たソースコードを見た…とか。

C++ のコーディングスタイルの話に関して言えば、私は以下のスライドで紹介されているJeff Bayの手法がかなり好きです。

http://www.slideshare.net/MoriharuOhzu/ss-14083300

全部実践する必要性は無いし、そもそも実践しようとしてもとてもしんどくて全部は無理なのですが、Jeff BayのObject Calisthenicsは私にコードの理想像を一つ教えてくれた気がします。

後は書籍リーダブルコードは良書です。
全部ここで伝えようとしても伝えきれないほどソースコードを綺麗に書くコツというのはたくさんあります。

まずはこういうところから見てみてもいいかもしれませんね。

投稿2015/04/17 14:48

編集2015/04/17 14:50
haru666

総合スコア1591

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

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

albacrow

2015/04/18 14:46

ありがとうございます。精進します。
guest

0

1つのファイルにまとめすぎる、という点で言うとC++の場合、ヘッダファイル(.h)にクラスの宣言(定義も兼ねる)を書きますが、メンバ関数(Javaでいうメソッド)は宣言だけ書いておいて、実際の定義は別のファイル(.cppなど)に書きます。
ただ、セッター・ゲッターなどはクラス宣言の方に書くことが多いです。

lang

1ヘッダファイル(MyClass.h)に記述 2 3class MyClass { 4public: 5 // コンストラクタ 6 MyClass(); 7 // デストラクタ 8 ~MyClass(); 9 10 // セッター・ゲッター 11 void SetCount(int value) { 12 Count = value; 13 } 14 int GetCount(void) const { 15 return Count; 16 } 17 // 計算 18 int Calc(int x, int y); 19private: 20 // メンバ変数 21 int Count; 22 23} 24 25MyClass.cppに記述 26 27#include MyClass.h 28MyClass::MyClass() 29{ 30 // 初期化処理 31} 32MyClass::~MyClass() 33{ 34 // 後片付け 35} 36int MyClass::Calc(int x, int y) 37{ 38 int Ret = 0; 39 // xとYを使って計算 40 ... 41 return Ret; 42}

こんな感じで書くと体裁はJavaっぽくなくなります。

あとは、メンバ関数内でなにがしかオブジェクトを使う場合

lang

1MyObject obj1; // 1 2MyObject* obj2 = new MyObject(); // 2 3

と2種類の書き方ができます。
よほどサイズの大きいオブジェクトでなければ 1 の書き方で構わないと思いますが、サイズが大きい場合、2の書き方にしないと、メモリが不足してしまいビルドは成功しても実行時に不正終了したりします。
じゃあ2の書き方の方がいいか、というと、C++はnewしたものはどこかで確実にdeleteしないとメモリリークになりますので、スコープを抜ける際に自動で破棄してくれる1の書き方が楽ではあります。
逆に1の書き方をしている場合、スコープ外に出ると破棄されてしまうので、そうなっては困る場合には2の書き方をする必要があります。

このあたりの使い分けは慣れるしかないと思いますが、Javaとはだいぶ違うと思える部分です。
こんな感じでしょうか。

投稿2015/04/17 13:36

編集2015/04/17 13:37
KoichiSugiyama

総合スコア3041

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

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

albacrow

2015/04/18 14:49

ありがとうございます。コード見直して、直せる部分は直したいと思います。
guest

0

他の方からも回答されているので別の情報を。
GoogleのC++スタイルガイドは、C++でどう書くべきか理由も含めて詳しく書いてありますので一読を勧めます。
http://www.textdrop.net/google-styleguide-ja/cppguide.xml

投稿2015/04/21 04:16

k_yosi

総合スコア16

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

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

albacrow

2015/04/21 11:27

ありがとうございます! 今日、先生からソースコードもらえたので、見比べながら勉強します。
guest

0

他の方の回答にもありますが、

1つのファイルにまとめすぎている

という特徴は「Javaっぽい」には合致しないと思います。
C++でもJavaでも、1ファイルが数千行というコードは何度も見たことがあります。

投稿2015/04/18 03:58

argius

総合スコア9388

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

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

albacrow

2015/04/18 14:50

ありがとうございます。ただ、数千行は見づらいと先生によく言われたので、適度な行数に押さえたいと思います。
argius

2015/04/18 14:56

すみません、肝心なことを書き忘れていました。 悪い意味で1ファイルが数千行というコードはC++でもJavaでもあるということです。先生のおっしゃるとおり、適度な行数に抑えたほうが良いです。
guest

0

C++とJavaは兄弟みたいなものなのでそんなに違いが出るとは思わないのですが
Javaっぽい書き方ってなんなんでしょうね。
クラス名が無駄に長いとか・・・

ゲームだと、効率を重視するためにあんまりインスタンスを作らなかったり
newしないことがあるので、もしかしたらnewしまくってるとか。

投稿2015/04/17 13:28

naga3

総合スコア1293

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

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

albacrow

2015/04/18 14:47

ゲームのキャラクターを破棄する際にdelete、新たに作成するたびにnewしている事があるので、それが原因かもしれません。 ありがとうございます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問