ページ 11

C++のクラスについて

Posted: 2013年5月13日(月) 18:48
by rasta
C#を勉強したての超未熟者です。

突然ですが、
C#は「クラス」の概念が大切ですよね。

ふと、疑問に思ったのですが、

ここでなのですが、C++にもクラスという概念があると聞きました。調べてみると普通にありました。


そこで、聞きたいのですが、例として、シューティングゲームをつくるとします

そこで、自分のデータを設定する必要があります。

ライフだったり、画像だったりいろいろと・・・・

そこでC++には構造体がありますしそこで設定すればいい、、、というのは理解ができます

またC#では自分クラスを作りそれがC++でいう構造体代わりになると言われました(教わりました)


(今回の質問の主題)
そこで不思議に思ったのですが、C++のクラスって何が目的なのでしょうか?
どのような時に使えるのでしょうか?(用途は?)



先生に聞いてみたらC++のクラスの概念はものすごく上級だと言われました


※僕はC++をまだ勉強していませんし、まだC#ですら駆け出しです。

勉強しろよ!って言われたらそれまでだし、ただ気になったことなので・・・・

教えていただけたら嬉しいです。

よろしくお願いします。

Re: C++のクラスについて

Posted: 2013年5月13日(月) 19:03
by softya(ソフト屋)
C++もクラスに「ライフだったり、画像だったりいろいろと・・・」の情報を持ちますのでC#と変わりません。
と言うよりC++では構造体とクラスの差が殆ど無いのです。構造体にコンストラクタもありますし、メンバ関数も持てます。
違いはデフォルトがprivateかpublicかぐらいです。

「C#で覚えるウィンドウズプログラミング 社内勉強会 - 番外編1 C++とC#の違い」
http://www40.atwiki.jp/s3study/pages/22.html

Re: C++のクラスについて

Posted: 2013年5月13日(月) 19:05
by ISLe
C++に限らずクラスとは、関連性のあるデータをまとめて振る舞いを持つオブジェクトを定義するもの、です。

クラス(というかオブジェクト指向)では、シューティングゲームでライフを減らすとき、
ライフの値を取り出して、減算して、再び値をセットする
ということはしません。
オブジェクトの持っている『ダメージを受ける』という振る舞いを呼び出し、オブジェクト自身に処理させます。

どのくらいダメージを受けるかも、%で指定したり、ダメージ種別をあらかじめ定義しておいて指定するようにします。
そうするとオブジェクトの中身の実装に依存しなくなります。
このへんはクラスと直接は関係ないですが。


ちなみにC++ではstructで定義したものもクラスです。
クラスと構造体に機能的な違いはありません。
一定の制限を守って定義したクラスはC言語の構造体と互換性を持ちます。

Re: C++のクラスについて

Posted: 2013年5月13日(月) 19:17
by rasta
返信ありがとうございます

それでは、皆様は、privateかpublicの違いを考え、場合に分けて構造体とクラスを使い分けてるのでしょうか?

Re: C++のクラスについて

Posted: 2013年5月13日(月) 19:56
by softya(ソフト屋)
私はC言語に近いデータの持ち方をしたい時だけstructを使います。バイナリ保存するとかですね。
ほぼ、データだけならstruct(コンストラクタは使うかも)でメソッドを含むオブジェクトならclassです。

Re: C++のクラスについて

Posted: 2013年5月13日(月) 23:03
by ISLe
「privateかpublicの違いを考え、場合に分けて構造体とクラスを使い分けてるのでしょうか?」
ではNoですが、
「場合に分けて構造体とクラスを使い分けてるのでしょうか?」
であればYesです。
C互換の構造体とクラスをきちんと使い分けないと致命的なバグに繋がります。

一定の条件を守らなくてはならないので、structだとC互換の構造体になるという単純なものではないです。
デフォルトがprivateかpublicかの違いと、C互換の構造体かクラスかの違いは関係がありません。


C言語のソースファイルにもインクルードするヘッダファイルで構造体を定義する場合は必ずstructを使います。
classだとC言語でコンパイルエラーになるので。

サンプルコードやテストコードを書くとき、いちいちpublicと打鍵するのを省くため、クラス定義にstructを使うことはよくあります。