C#を勉強したての超未熟者です。
突然ですが、
C#は「クラス」の概念が大切ですよね。
ふと、疑問に思ったのですが、
ここでなのですが、C++にもクラスという概念があると聞きました。調べてみると普通にありました。
そこで、聞きたいのですが、例として、シューティングゲームをつくるとします
そこで、自分のデータを設定する必要があります。
ライフだったり、画像だったりいろいろと・・・・
そこでC++には構造体がありますしそこで設定すればいい、、、というのは理解ができます
またC#では自分クラスを作りそれがC++でいう構造体代わりになると言われました(教わりました)
(今回の質問の主題)
そこで不思議に思ったのですが、C++のクラスって何が目的なのでしょうか?
どのような時に使えるのでしょうか?(用途は?)
先生に聞いてみたらC++のクラスの概念はものすごく上級だと言われました
※僕はC++をまだ勉強していませんし、まだC#ですら駆け出しです。
勉強しろよ!って言われたらそれまでだし、ただ気になったことなので・・・・
教えていただけたら嬉しいです。
よろしくお願いします。
C++のクラスについて
- softya(ソフト屋)
- 副管理人
- 記事: 11677
- 登録日時: 15年前
- 住所: 東海地方
- 連絡を取る:
Re: C++のクラスについて
C++もクラスに「ライフだったり、画像だったりいろいろと・・・」の情報を持ちますのでC#と変わりません。
と言うよりC++では構造体とクラスの差が殆ど無いのです。構造体にコンストラクタもありますし、メンバ関数も持てます。
違いはデフォルトがprivateかpublicかぐらいです。
「C#で覚えるウィンドウズプログラミング 社内勉強会 - 番外編1 C++とC#の違い」
http://www40.atwiki.jp/s3study/pages/22.html
と言うよりC++では構造体とクラスの差が殆ど無いのです。構造体にコンストラクタもありますし、メンバ関数も持てます。
違いはデフォルトがprivateかpublicかぐらいです。
「C#で覚えるウィンドウズプログラミング 社内勉強会 - 番外編1 C++とC#の違い」
http://www40.atwiki.jp/s3study/pages/22.html
by softya(ソフト屋) 方針:私は仕組み・考え方を理解して欲しいので直接的なコードを回答することはまれですので、すぐコードがほしい方はその旨をご明記下さい。私以外の方と交代したいと思います(代わりの方がいる保証は出来かねます)。
Re: C++のクラスについて
C++に限らずクラスとは、関連性のあるデータをまとめて振る舞いを持つオブジェクトを定義するもの、です。
クラス(というかオブジェクト指向)では、シューティングゲームでライフを減らすとき、
ライフの値を取り出して、減算して、再び値をセットする
ということはしません。
オブジェクトの持っている『ダメージを受ける』という振る舞いを呼び出し、オブジェクト自身に処理させます。
どのくらいダメージを受けるかも、%で指定したり、ダメージ種別をあらかじめ定義しておいて指定するようにします。
そうするとオブジェクトの中身の実装に依存しなくなります。
このへんはクラスと直接は関係ないですが。
ちなみにC++ではstructで定義したものもクラスです。
クラスと構造体に機能的な違いはありません。
一定の制限を守って定義したクラスはC言語の構造体と互換性を持ちます。
クラス(というかオブジェクト指向)では、シューティングゲームでライフを減らすとき、
ライフの値を取り出して、減算して、再び値をセットする
ということはしません。
オブジェクトの持っている『ダメージを受ける』という振る舞いを呼び出し、オブジェクト自身に処理させます。
どのくらいダメージを受けるかも、%で指定したり、ダメージ種別をあらかじめ定義しておいて指定するようにします。
そうするとオブジェクトの中身の実装に依存しなくなります。
このへんはクラスと直接は関係ないですが。
ちなみにC++ではstructで定義したものもクラスです。
クラスと構造体に機能的な違いはありません。
一定の制限を守って定義したクラスはC言語の構造体と互換性を持ちます。
- softya(ソフト屋)
- 副管理人
- 記事: 11677
- 登録日時: 15年前
- 住所: 東海地方
- 連絡を取る:
Re: C++のクラスについて
私はC言語に近いデータの持ち方をしたい時だけstructを使います。バイナリ保存するとかですね。
ほぼ、データだけならstruct(コンストラクタは使うかも)でメソッドを含むオブジェクトならclassです。
ほぼ、データだけならstruct(コンストラクタは使うかも)でメソッドを含むオブジェクトならclassです。
by softya(ソフト屋) 方針:私は仕組み・考え方を理解して欲しいので直接的なコードを回答することはまれですので、すぐコードがほしい方はその旨をご明記下さい。私以外の方と交代したいと思います(代わりの方がいる保証は出来かねます)。
Re: C++のクラスについて
「privateかpublicの違いを考え、場合に分けて構造体とクラスを使い分けてるのでしょうか?」
ではNoですが、
「場合に分けて構造体とクラスを使い分けてるのでしょうか?」
であればYesです。
C互換の構造体とクラスをきちんと使い分けないと致命的なバグに繋がります。
一定の条件を守らなくてはならないので、structだとC互換の構造体になるという単純なものではないです。
デフォルトがprivateかpublicかの違いと、C互換の構造体かクラスかの違いは関係がありません。
C言語のソースファイルにもインクルードするヘッダファイルで構造体を定義する場合は必ずstructを使います。
classだとC言語でコンパイルエラーになるので。
サンプルコードやテストコードを書くとき、いちいちpublicと打鍵するのを省くため、クラス定義にstructを使うことはよくあります。
ではNoですが、
「場合に分けて構造体とクラスを使い分けてるのでしょうか?」
であればYesです。
C互換の構造体とクラスをきちんと使い分けないと致命的なバグに繋がります。
一定の条件を守らなくてはならないので、structだとC互換の構造体になるという単純なものではないです。
デフォルトがprivateかpublicかの違いと、C互換の構造体かクラスかの違いは関係がありません。
C言語のソースファイルにもインクルードするヘッダファイルで構造体を定義する場合は必ずstructを使います。
classだとC言語でコンパイルエラーになるので。
サンプルコードやテストコードを書くとき、いちいちpublicと打鍵するのを省くため、クラス定義にstructを使うことはよくあります。