2008-05-21から1日間の記事一覧

演算子のオーバーロード

C++

参照を戻すこともできた(^^; +演算子が破壊的なのはマズイか。 #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>…

単項演算子のオーバーロード

C++

デフォルト引数でオーバーロードしようとしたけどうまくいかず… #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>…

添え字演算子

C++

#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>…

代入演算子の実行順

C++

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>…

親クラスのコンストラクタを呼び出す

C++

これで合ってるのかなー? #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>…

protectedで継承

C++

深い継承は使わない方がいいかなー。 #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>…

継承とコンストラクタ・デストラクタ

C++

#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>…