Home > C++ | C言語 > C++トリビアルメモ1

C++トリビアルメモ1

すごい簡単に作れるので作ってみた。
http://kosumi.myminicity.com/
コスミー町です。訪れてくれると育つらしい。

ひさびさにC++をさわるといろいろバグる・ハマる。というのは以前にも言った気がする。

1.クラスの前方宣言とインスタンス
例えばfriendを使う場合、friendしたいクラスを認識するにはfriendする前にそのクラスが宣言されていないといけない。つまり、


class HogeTester;   // 前方宣言

class Hoge {
   friend HogeTester;

private:
   int foo;
   void bar();
};

みたいな感じで型だけを先に宣言する「前方宣言」が必要となる。これを使わないとHogeTesterの中でHogeを使いたいはずだから入れ子になってしまう。
で、これはいい。これはいいんだけど、これに習って例えば内部クラスの定義を下のほうに書きたいなーとか思うとハマる。


class Hoge {
public:
   class Foo;
   Foo bar;

   class Foo {
   public:
      int a;
   };
};

これは無理。barがインスタンスなため、Fooのデータサイズが分からないとコンパイルのしようがないんだろう。よく考えればそりゃそうかもしれないが、Javaとかやってるとこれくらい許してほしいと思ってしまう。
コンパイル可能なのは


class Hoge {
public:
   class Foo {
   public:
      int a;
   };

   Foo bar;
};

あと、以下のような場合はOKっぽい。


class Hoge {
public:
   class Foo;
   Foo *bar;
   Hoge() { bar = new Foo(); }

   class Foo {
   public:
      int a;
   }
};

ポインタのため。

あと2個ほどはまったんだけど、意外と長くなったのでエントリ分けることにする。
ああそうだ、しょーもない話では


double a = 2/3;

としたらaが0になってはまった。スクリプト言語ばっかやってるとこうなる(スクリプト言語でも気をつけろという話だろうが)
正しくは


double a = 2.0/3.0;

小数点をつけないとintに丸められてしまうとさ。

以上

Comments:0

Comment Form
Remember personal info

Trackbacks:0

Trackback URL for this entry
http://red-treasure.com/report/wp-trackback.php?p=141
Listed below are links to weblogs that reference
C++トリビアルメモ1 from コスミー報告書[社外秘]

Home > C++ | C言語 > C++トリビアルメモ1

Search
Feeds
Meta
 合計:011636
 今日:0107 昨日:0165

Return to page top