2008-05-01から1ヶ月間の記事一覧
引数の参照渡しのことを考えると、組み込み型とユーザ定義型をまたぐようなテンプレートを作るべきじゃないのかなぁ、など思った。 「func(100)」とかできないのはいやだし、一時オブジェクトのビミョーな動きを考えると、ユーザ定義型はなるべく参照で渡し…
面白いなぁ。 #include <iostream> using namespace std; class Fib { private: int a; int b; public: Fib() : a(1), b(1) {} int operator() (){ int tmp = a; a = b; b = tmp + b; return tmp; } }; int main() { Fib fib; for (int i = 0; i < 10; i++) { cout << </iostream>…
「#include 」が必要。 クラスを使うだけなら「#include 」だけでいいのはなんでだろう? #include <string> #include <iostream> using namespace std; int main() { string s; cin >> s; cout << s; return 0; }</iostream></string>
読み込めない…なんでー? #include <iostream> using namespace std; int main() { char cs[256]; cin.unsetf(ios::skipws); cin >> cs; cout << cs << endl; return 0; } 100続行するには何かキーを押してください . . .</iostream>
入力を出力につなげてみたらコンパイルできず。 できそうな感じだけど。 #include <string> #include <iostream> #include <fstream> using namespace std; int main() { string buf; ofstream fout("C:/foo.txt"); if (!fout.is_open()) { exit(1); } fout << "あいうえお"; fout.close</fstream></iostream></string>…
C言語と同じやり方しかないのかな? #include <iostream> #include <cstdarg> using namespace std; void func(int n, ...) { va_list args; va_start(args, n); for (int i = 0; i < n; i++) { int v = va_arg(args, int); cout << v << endl; } va_end(args); } int main() { </cstdarg></iostream>…
ふむふむ。 #include <iostream> #include <fstream> using namespace std; int main() { ofstream fout("foo.txt"); if (!fout.is_open()) { exit(1); } fout << "ABCDE"; fout.close(); ifstream fin("foo.txt"); if (!fin.is_open()) { exit(1); } fin.seekg(-1, ios::end); </fstream></iostream>…
#include <iostream> #define BUFSIZE 256 using namespace std; istream &operator>>(istream &in, ostream &out) { char buf[BUFSIZE]; streamsize n; do { in.read(buf, BUFSIZE); n = in.gcount(); out.write(buf, n); } while (n >= BUFSIZE); return in; } int m</iostream>…
Googleで「鼻毛」を検索すると、スポンサーリンクに「鼻毛はアマゾンで」と出てくる。言いたいことは分かる。でもねぇ…
フラグって残るのか…。 #include <iostream> #include <iomanip> using namespace std; int main() { cout << showbase << hex << 100 << endl; cout << 100 << endl; return 0; } 0x64 0x64</iomanip></iostream>
boolってキーワードなんだなー。 #include <iostream> #include <iomanip> using namespace std; int main() { cout << boolalpha << true << endl; cout << boolalpha << 1 << endl; return 0; } true 1</iomanip></iostream>
参照を戻すこともできた(^^; +演算子が破壊的なのはマズイか。 #include <iostream> using namespace std; class Foo { private: int i; public: Foo(int i) : i(i) {}; int to_i() { return i; } Foo &operator +(Foo &foo) { i += foo.i; return *this; } Foo &oper</iostream>…
デフォルト引数でオーバーロードしようとしたけどうまくいかず… #include <iostream> using namespace std; class Foo { private: int i; public: Foo(int i) : i(i) {}; int to_i() { return i; } Foo &operator ++() { cout << "前置\n"; ++i; return *this; } Foo &</iostream>…
#include <iostream> #include <cstring> using namespace std; class Array { private: int _size; int *elements; public: Array(int size); ~Array(); int size(); int &operator [](int i); }; Array::Array(int size) : _size(size) { elements = new int[size]; memset(el</cstring></iostream>…
mainもフレンド関数にできるのかー。 #include <iostream> using namespace std; int main(); class Foo { private: int i; public: Foo(); Foo(int i); Foo &operator=(Foo &foo); friend int main(); }; Foo::Foo() : i(0) {} Foo::Foo(int i) : i(i) {} Foo &Foo::o</iostream>…
これで合ってるのかなー? #include <iostream> using namespace std; class Foo { private: int i; public: Foo(int i) : i(i) {} void foo() { cout << i << endl; } }; class Bar : public Foo { public: Bar(int i) : Foo(i) {} void bar() { foo(); } }; int main</iostream>…
深い継承は使わない方がいいかなー。 #include <iostream> using namespace std; class Foo { protected: int i; public: Foo(int i) : i(i) {} void foo() { cout << i << endl; } }; class Bar : /*private*/ protected Foo { public: Bar(int i) : Foo(i) {} void b</iostream>…
#include <iostream> using namespace std; class Foo { public: Foo() { cout << "Foo constructor" << endl; } ~Foo() { cout << "Foo destructor" << endl; } }; class Bar : public Foo { public: Bar() { cout << "Bar constructor" << endl; } ~Bar() { cout << </iostream>…
代入ではコピーコンストラクタは呼ばれない、と。 代入は演算子のオーバーロードで操作するのかな? #include <iostream> using namespace std; class Foo { int i; public: Foo(int i) : i(i) { cout << "constructor: " << i << "\n"; } Foo(const Foo &foo) { cout <</iostream>…
使えた。 #include <iostream> using namespace std; class Foo { int i; public: Foo(int i) : i(i) { cout << "constructor: " << i << "\n"; } Foo(const Foo &foo) : i(foo.i) { cout << "copy constructor: " << i << "<-" << foo.i << "\n"; i = foo.i; } int ge</iostream>…
デフォルト引数に仮引数は使えない、と。 #include <iostream> using namespace std; void func(int a, int b = a) { cout << a + b << "\n"; } int main() { func(10); return 0; } foo.cpp:5: error: `a' was not declared in this scope</iostream>
両方書いたらエラーになった。 宣言に書いておいたほうが無難かなぁ… #include <iostream> using namespace std; class Foo { private: int i; public: void set_i(int i = 100); int get_i(); }; void Foo::set_i(int i /*= 100*/) { this->i = i; } int Foo::get_i()</iostream>…
Function#bind()で部分適用できることを同僚に教えもらった。 ちまちまと使ってみているが、イベントリスナの登録時にElementを関連付けられるのがちょっと気に入っている。 var element = $('foo'); element.observe('click', function(foo, event) { // 「…
たぶんNRVOが効いてるはず。 #include <iostream> using namespace std; class Foo { private: int i; public: Foo(int i); }; Foo::Foo(int i) : i(i) {} Foo func() { return Foo(100); } int main() { Foo foo = func(); cout << &foo << "\n"; return 0; }</iostream>
参照を戻すことはできなかったけど、引数を参照にすることはできた。 ふつーどっちを使うんだろう? #include <iostream> using namespace std; class Foo { private: int i; public: Foo(int i); //Foo operator+(Foo foo); Foo operator+(Foo &foo); int get_i(); };</iostream>…
deleteしないとプログラムが終了してもデストラクタは呼ばれない、と。 #include <iostream> using namespace std; class Foo { private: int i; public: Foo() { cout << "Foo()\n"; }; ~Foo() { cout << "~Foo()\n"; }; }; int main() { Foo *p = new Foo; return 0;</iostream>…
落ちた。 #include <iostream> using namespace std; class Foo { private: int i; public: Foo() { cout << "Foo()\n"; }; ~Foo() { cout << "~Foo()\n"; }; }; int main() { Foo *p = new Foo[4]; p++; delete [] p; return 0; } Foo() Foo() Foo() Foo() 7 [sig] fo</iostream>…
malloc/freeだとコンストラクタ/デストラクタが呼ばれない、と。 #include <iostream> #include <cstring> using namespace std; class Foo { public: Foo() { cout << "Foo()\n"; }; ~Foo() { cout << "~Foo()\n"; }; }; int main() { Foo *p = (Foo *) malloc(sizeof(Foo)); d</cstring></iostream>…
g++とVCで結果が違う… #include <iostream> using namespace std; inline void debug(const char *s, long id) { cerr << s << ":" << id << endl; } class Foo { private: int i; public: Foo(int i) : i(i) { debug("Foo::Foo()", i); }; ~Foo() { debug("Foo::~Foo(</iostream>…
http://homepage3.nifty.com/~masumoto/cpp/topic/index.html#SEC6 コピーコンストラクタなんてあるのかー。