2009-08-07から1日間の記事一覧

浮動小数点の数値誤差

ロベールのC++入門講座 03-09浮動小数点の話で少し驚いた。下記のようなコードを実行する。 #include <iostream> using namespace std; int main () { for (double i=0.0; i<1; i+=0.1) { cout << i << endl; } return 0; } 条件ではiは1以下までとなっているはずなの</iostream>…

C++標準ライブラリ

C++

さて、次回からはC++の標準のライブラリについて勉強していきたいと思います。当然STLも含みます。STLというのはクラスとテンプレートを利用したStandard Template Libraryのことでかなり色々なことが簡単に実現できる素晴らしいライブラリ群なんだそうです…

ロベールのC++入門講座

購入しました。ロベールのC++入門講座作者: ロベール出版社/メーカー: 毎日コミュニケーションズ発売日: 2007/11/15メディア: 単行本(ソフトカバー)購入: 26人 クリック: 25,357回この商品を含むブログ (127件) を見るこれを読みながらまた一からC++を勉強…

38章 C言語との連携

C++

http://www.geocities.jp/ky_webid/cpp/language/038.html基本的に読んで理解する系ですね。C言語のライブラリをC++で利用可能にするための宣言「extern "C"」というものです。一応自分でも確認してみました。 // -- main.cpp -- #include <iostream> #include "test.h</iostream>…

テンプレートの部分特殊化

C++

http://www.geocities.jp/ky_webid/cpp/language/037.htmlテンプレートの特殊化の、部分特別バージョンが存在します。どういったものかというと、例えば同じ型は型でも、ポインタ型の場合の時だけ別処理にするみたいな感じです。 #include <iostream> using namespace </iostream>…

37章 テンプレートの特殊化

C++

http://www.geocities.jp/ky_webid/cpp/language/037.html基本的にはテンプレート使いたいけど、ある型のときだけ別の処理にしたいというときに使えるのがテンプレートの特殊化という機能です。 #include <iostream> using namespace std; template<class T> class CSample { pu</class></iostream>…

36章 placement new

C++

http://www.geocities.jp/ky_webid/cpp/language/036.htmlこれまでになくややこしい概念ですね。要はnewする時にメモリ確保を予め用意しておいた領域で行うかそうでないかの違いみたいです。とにかく実装してみます。 #include <iostream> #include <new> #include <cstring> using n</cstring></new></iostream>…

35章 グローバルな演算子オーバーロード

C++

http://www.geocities.jp/ky_webid/cpp/language/035.html演算子のオーバーロードはクラスのメンバ関数単位だけでなく、グローバルな演算子に対しても行えます。その例としてstd::coutの演算子に自作のクラスも受け付けてくれるようにオーバーロードしてみま…

静的メンバ関数ポインタ

C++

http://www.geocities.jp/ky_webid/cpp/language/034.html静的メンバ関数のポインタはグローバルな関数ポインタと同じような扱いで実現できます。 #include <iostream> using namespace std; class CSample { public: static void func () { cout << "CSample::func" <</iostream>…

メンバ関数ポインタと多態性

C++

http://www.geocities.jp/ky_webid/cpp/language/034.html なお、メンバ関数ポインタが指し示しているメンバ関数が、サブクラスによってオーバーライドされており、サブクラス側のインスタンスからアクセスした場合には通常通り、多態性が働き、サブクラス側…

34章 メンバ関数ポインタ

C++

http://www.geocities.jp/ky_webid/cpp/language/034.html関数ポインタというのはC言語の時にならいました。C++では更に、あるクラスのメンバ関数のポインタも得ることができます。さっそく実装してみます。 #include <iostream> using namespace std; class CSample {</iostream>…

同じスーパークラスを持つクラスを多重継承

C++

http://www.geocities.jp/ky_webid/cpp/language/033.html同じスーパークラスを持っているクラスを多重継承してしまうと問題が起こります。 #include <iostream> using namespace std; class CBase { public: void Foo () { cout << "CBase::Foo" << endl; } }; class </iostream>…

多重継承で重複するメンバ関数をオーバーライド

C++

http://www.geocities.jp/ky_webid/cpp/language/033.html多重継承とは複数のクラスをスーパークラスとして持つことです。もしスーパークラスとなるクラス同士でまったく同じ宣言の関数があった場合、問題が起きます。 #include <iostream> using namespace std; class</iostream>…

33章 多重継承

C++

http://www.geocities.jp/ky_webid/cpp/language/033.html複数のクラスからサブクラスを定義することを多重継承といいます。今までやっていた継承は一つだけだったので単一継承と呼びます。書き方は下記のような感じです。 class CSub : public CSuper1, pub…

protectedな継承

C++

http://www.geocities.jp/ky_webid/cpp/language/032.html前回のprivateな継承に引き続き、今回はprotectedな継承についてです。考え方は殆ど同じで、スーパークラスのprivate以外のメンバが、サブクラスのインスタンスからはprotectedのように見えるという…

32章 privateな継承

C++

http://www.geocities.jp/ky_webid/cpp/language/032.html今まで継承を行う際、 class CSub : public CSuper のようにpublicと書いていました。実はprivateやprotectedも指定できるらしいのです。今回はまず、privateな継承から学んでいきたいと思います。pr…

31章 ローカルクラス

C++

http://www.geocities.jp/ky_webid/cpp/language/031.html関数内で宣言したクラスのことをローカルクラスといいます。内部クラスと同様何時使うのか想像付きませんが、とりあえず実装してみます。 #include <iostream> using namespace std; void foo () { class CLoca</iostream>…

無名クラス

C++

http://www.geocities.jp/ky_webid/cpp/language/030.html内部クラスを定義するときに、名前を省略すると無名クラスというものになります。例を見た方が早いですね、実装してみます。 #include <iostream> using namespace std; class COuter { public: class { public</iostream>…

30章 内部クラス

C++

http://www.geocities.jp/ky_webid/cpp/language/030.htmlクラスの中でクラス宣言ができる。これまたややこしい。。。とりあえず実装してみます。 #include <iostream> using namespace std; class COuter { public: class CInner { public: CInner() : m_num(100) {};</iostream>…

メンバ関数に代入する

C++

stringクラスについて勉強中に気になる記述が。 #include <string> #include <iostream> using namespace std; int main () { string str("abcdedf"); try { str.at(100) = 'a'; } catch( out_of_range e ) { cout << "範囲外のデータにアクセスしました" << endl; }; return 0</iostream></string>…

stringクラス

C++

http://www.geocities.jp/ky_webid/cpp/library/001.html文字列を便利且つ簡単に扱うためのクラス。ただしstringクラスというには少し語弊がある。stringとは実際には下記のように定義されている。 typedef basic_string<char> string; なので厳密に言えばbasic_st</char>…