LIFE LOG(ここにはあなたのブログ名)

あつあつ備忘録

ソフトやハード、時にはメカの備忘録をまとめていきます

C++

【C++】vectorでpairを使うメモ

最初に vectorではpairが用いられることが多いようなので、C++でvectorとpairを使った動作を備忘録として残します。 vector_pair.cpp #include <iostream> #include <vector> int main() { std::vector<int> vec; vec.push_back(2); vec.push_back(7); vec.push_back(0); vec.push_b</int></vector></iostream>…

【C++】コピーコンストラクタ

これまでの方法だと オブジェクトを関数に渡す 関数からオブジェクトを返す ときに問題が発生した。 具体的には オブジェクトを関数に渡すと、そのオブジェクトのコピーが作成され、オブジェクトを受け付ける関数の引数として使用される 割り当てられたメモ…

【C++】コンストラクタ関数のオーバーロード

コンストラクタ関数もオーバーロードできる コンストラクタをオーバーロードするメリット 柔軟性を得る 配列のサポート コピーコンストラクタを作成すること study145.cpp #include <iostream> using namespace std; class myclass { int x; public: myclass() { x = 0</iostream>…

【C++】参照の返し

stdudy135.cpp #include <iostream> using namespace std; int &f(); int x; int main() { f() = 100; cout << x << "\n"; return 0; } int &f() { return x; } $ ./study135 100 f() = 100;はf()によって返される参照に100を代入している return x;はxへの参照(x</iostream>…

【C++】オブジェクト参照の引き渡し

atsuyakoike.hatenablog.com こちらでは、オブジェクトを関数に渡した場合は、オブジェクトのコピーが作成されることを確認している。 コピーなのでコンストラクタは呼ばれないがデストラクタは呼ばれる 動的メモリを2度以上開放することになり問題が発生す…

【C++】参照

参照(reference) すべての面で変数の別名として動作する暗黙的なポインタ(implict pointer) 用途 参照を関数に渡すことができる 関数から参照を返すことができる 独立した参照を作成することができる study127_1.cpp #include <iostream> using namespace std; void f</iostream>…

【C++】newとdelete

C言語でメモリを動的割り当てするときはmalloc()を使用し、メモリを開放するときにfree()を使う C++ではnewを使用してメモリを割り当て、deleteを使用して開放する new演算子は自動的に十分なメモリを割り当てる sizeof()などを使用する必要がない new演算子…

【C++】オブジェクトのポインタ

オブジェクトのポインタ オブジェクトポインタを使用した演算子は、他のデータ型のポインタ演算と同様に、そのオブジェクト型に関して行われる オブジェクトポインタをインクリメントすると次のオブジェクトを指すようになり、デクリメントするとその逆にな…

【C++】オブジェクトの配列

オブジェクトは変数を持っており、他の変数と同じ機能と属性を持っている オブジェクト配列へのアクセス方法も、ほかの変数配列と同じ study108.cpp #include <iostream> using namespace std; class samp { int a; public: samp( int n ) { a = n; } int get_a() { re</iostream>…

【C++】フレンド関数

関数をクラスのメンバにすることなく、関数からクラスの非公開メンバにアクセスすることができる 1つの関数から、2つ以上のクラスの非公開メンバにアクセスしたい時などに使われる。 クラスの宣言の内部にfriendを先頭につけて関数のプロトタイプを含める s…

【C++】関数からオブジェクトの返し

関数にオブジェクトを渡すことができるように、返すこともできる。 #include <iostream> #include <cstring> using namespace std; class samp { char s[80]; public: void show() { cout << s << "\n"; } void set( char * str ) { strcpy( s, str ); } }; samp input() { char</cstring></iostream>…

【C++】関数へオブジェクトの引き渡し

関数に引数としてデータを渡すのと同じように、オブジェクトを渡すこともできる。 study86.cpp #include <iostream> using namespace std; class samp { int i; public: samp( int n ) { i = n; } void set_i( int n ) { i = n; } int get_i() { return i; } }; void s</iostream>…

【C++】オブジェクトの代入

「オブジェクト1=オブジェクト2」のような書き方で代入できる。 study79.cpp #include <iostream> using namespace std; class myclass { int a, b; public: void set( int i, int j ) { a = i; b = j; } void show() { cout << a << ' ' << b << "\n"; } }; int main</iostream>…

【C++】インライン関数

インライン関数の特徴 メリット 関数の呼び出しと終了時に伴うオーバーヘッドが発生しないことから、通常の関数よりも早く実行できる。 デメリット ファイルサイズが大きくなる。 ループ、goto、switchを含めることができない 再帰してはいけない 関数定義の…

【C++】継承①

継承をすることで、最も汎用的なクラスから、最も特化されたクラスへの流れを示すクラス階層を作成できる。 あるクラスを別のクラスが継承するとき 継承される側のクラスを 基本クラス と呼ぶ 継承する側のクラスを 派生クラス と呼ぶ #include <iostream> using names</iostream>…

【C++】仮引数を受け取るコンストラクタ

コンストラクタ関数には引数を渡すことができる study48.cpp #include <iostream> #include <cstring> #include <cstdlib> using namespace std; class strtype { char *p; int len; public: strtype( char * ); ~strtype(); void show(); }; strtype::strtype( char *ptr ) { len = strl</cstdlib></cstring></iostream>…

【C++】コンストラクタ関数とデストラクタ関数

コンストラクタ関数 クラス名と同じ。 スタックの索引値を設定することができる オブジェクト作成時に実行される デストラクタ関数 オブジェクトが破棄されるときに呼び出される mainでオブジェクトが生成されていたとしたら、mainを抜けるとき 例えばオブジ…

【C++】オーバーロード

関数オーバーロードの主な用途として、コンパイル時ポリフォーリズムを行うことが挙げられる 1つの名前をオーバーロードすることで、複数あるデータの方の種類などに対応できる 関数をたくさん作り、それぞれ別の名前をつける必要がない study29.cpp #includ…

【C++】クラスの作成

概要 1つのクラスに対して複数のオブジェクトを作ることができる。 今回はstackクラスに対して、s1とs2という名前でオブジェクトを作成する。 オブジェクト同士は干渉しない study21.cpp #include <iostream> using namespace std; #define SIZE 10 // 文字列の保存 cl</iostream>…

【C++】オブジェクト指向プログラミング

カプセル化 プログラムコードとプログラムコードが扱うデータを一体化して、外部の干渉から両者を保護するための仕組み。 実際にはprivateやpublicといった機能を使用する。publicはprivateの制御インターフェースを提供されるっために使われる。 ポリモーフ…