クラス

zxc
記事: 79
登録日時: 13年前
住所: 日本の背骨(?)あたり

クラス

投稿記事 by zxc » 13年前

 とりあえず日記はメモ代わりに使おうと思う。

クラスは分かってくると「うまくできているんだなぁ」と思う。
わからないことのほうが多いけど。間違いに気づいたら後で訂正しよう。

 クラスはある変数(もしくは関数?) へのアクセスを限定する。
よって

・予期せぬ値・定義の変更が防がれるのでバグが減る。
・関連した変数と関数がまとまることで読みやすい。

他のメリット(?)
・ファイル分割でそれぞれのファイルがすっきりする。修正も容易。
・関連したクラスを継承等で関連付け、まとめることで読みやすい。
・いろいろなパターンを参考にできる(例:シングルトンパターン)

 とりあえず関連した変数・関数をまとめたり、それらの変更を制限したり
名前空間とやらで読みやすかったり。いろいろ便利らしい。
オブジェクト指向万歳。

 しかし分からないことも多い。
共用体なんていつ使うんだ・・・・
何が出来るかわかっても、何に使えるか思いつかない。


コンストラクタとデストラクタを使う意味も明らかに
「初期設定or解体していますよ~」と示すためなのか。
確かに適当な関数をいちいち作るのは面倒だし読みづらいだろうけど・・・

アバター
softya(ソフト屋)
副管理人
記事: 11677
登録日時: 14年前

Re: クラス

投稿記事 by softya(ソフト屋) » 13年前

まだ、拾い読みした情報をまとめただけ感がありますね。
オブジェクト指向バンザイのところのポイントもずれてる感じがします。

苦労して組むのが一番理解する早道ですね。
※ 何度も作りなおさないとダメですよ。
あとSTLの様なものを自分で組んでみるとか。継承で機能追加とか、

コンストラクタ・デストラクタも結構重要で便利でもあります。
そう、コピーコンストラクタも。

アバター
lriki
記事: 88
登録日時: 14年前

RE: クラス

投稿記事 by lriki » 13年前

ご参考までに、初めて見たときちょっと感動した共用体の小技をひとつ。
組み込み系だと使ってるところもあるようです。

CODE:

union BitField
{
    unsigned char Byte;

    struct
    {
        unsigned char b0 : 1;
        unsigned char b1 : 1;
        unsigned char b2 : 1;
        unsigned char b3 : 1;
        unsigned char b4 : 1;
        unsigned char b5 : 1;
        unsigned char b6 : 1;
        unsigned char b7 : 1;
    } Bit;
};

BitField bf;
bf.Byte = 0x12;

printf( "%d %d %d %d %d %d %d %d\n",
    bf.Bit.b7,
    bf.Bit.b6,
    bf.Bit.b5,
    bf.Bit.b4,
    bf.Bit.b3,
    bf.Bit.b2,
    bf.Bit.b1,
    bf.Bit.b0 );

zxc
記事: 79
登録日時: 13年前
住所: 日本の背骨(?)あたり

RE: クラス

投稿記事 by zxc » 13年前

>>softya(ソフト屋) さん

 オブジェクト指向は「構成要素を自己完結したオブジェクトとして、
問題点をさらに細かい要素に分解できる」ということで良いですか?
(「独習C++第三版」から簡単にまとめました)
ちょっと思っていたのとは違いました。要するにC++で言えば、クラスと
ファイル分割によって修正や開発を容易にする、ということでしょうか。

 コピーコンストラクタは今のところ投げています。いろいろな手法を
知っていると多くの実装方法が思いつくので是非覚えたいです。
継承も簡単に本を読んだだけで使ったことは無いです。
あるクラスの機能を受け継ぎつつ、何かを追加するようなものだったような・・・

>>梨樹さん

 これは16進数から2進数への変換ですか。組んだこと無いので
分かりませんが、相当すっきりしていて短いですね。
「=」と思ったら「:」でした。ちょっとこのような使用例を見たこと無いので
どう動いているのかは分かりません;

アバター
softya(ソフト屋)
副管理人
記事: 11677
登録日時: 14年前

RE: クラス

投稿記事 by softya(ソフト屋) » 13年前

zxc さんが書きました:>>softya(ソフト屋) さん
 オブジェクト指向は「構成要素を自己完結したオブジェクトとして、
問題点をさらに細かい要素に分解できる」ということで良いですか?
(「独習C++第三版」から簡単にまとめました)
ちょっと思っていたのとは違いました。要するにC++で言えば、クラスと
ファイル分割によって修正や開発を容易にする、ということでしょうか。
私の思うC++の最大限の効能は新しい機能を言語に追加した様に見せかけることが出来る事だと思います。
メモリの確保に神経を使わないstringやポインタ解放を管理するスマートポインタなど便利で細かい部分を隠蔽した新しい機能を作れることじゃないでしょうか。
まぁ、これも一面なんですけどね。
zxc さんが書きました:  コピーコンストラクタは今のところ投げています。いろいろな手法を
知っていると多くの実装方法が思いつくので是非覚えたいです。
継承も簡単に本を読んだだけで使ったことは無いです。
あるクラスの機能を受け継ぎつつ、何かを追加するようなものだったような・・・
ベターCとして使う分には継承は使わないかも知れません。
ただ部品化という側面で見ると継承は重要なファクターです。
zxc さんが書きました: >>梨樹さん
 これは16進数から2進数への変換ですか。組んだこと無いので
分かりませんが、相当すっきりしていて短いですね。
「=」と思ったら「:」でした。ちょっとこのような使用例を見たこと無いので
どう動いているのかは分かりません;
それはビットフィールドですね。
ビット単位で数値を扱う機能です。