Tag C++

C++:オーバーロードについて > コンストラクタのオーバーロード(1)

C++の関数のオーバーロードの中からコンストラクタのオーバーロードについてのメモ。 オーバーロードについて コンストラクタをオーバーロードする目的は次の3つ。 柔軟性を得る 配列をサポートする コピーコンストラクタを作成する 柔軟性を得る オブジェクトの初期化をするかしないかを選択できるようにする。 サンプルコード 配列をサポートする 動的配列は初期化することが出来ないため、初期値を受け取るコンストラクタがある場合、初期値を受け取らないコンストラクタをオーバーロードする必要がある。 サンプルコード コピーコンストラクタを作成する 関数にオブジェクト渡したり関数からオブジェクトを返すとき、一時的にオブジェクトのコピーが生成されるため、デストラクタが複数回実行され、望ましくない影響が出る可能性がある。 オブジェクトのコピー生成時の実行処理を定義するために、コピーコンストラクタを作成しオブジェクトのコピーが生成されるときの処理を正確に指定することができる。 コピーコンストラクタの定義 サンプルコード 補足説明 コピーコンストラクタは初期化の状況にしか対処出来ない(代入には使用できない) まとめ この記事がみなさんのお役に立ちましたら、下記「Share it」よりブックマークやSNSで共有していただければ幸いです。

C++:C標準ライブラリと主な関数のリスト まとめインデックス

これまでに紹介したC言語の主な標準ライブラリに関するインデックスを作成しました。 C標準ライブラリと主な関数のリスト インデックス stdlib.h stdio.h string.h ctype.h math.h time.h まとめ C言語の標準ライブラリを全て覚えるのは少々無理がありますが、ひと通り目を通して何が出来るか、どういった部品(関数)が揃っているのかを予め知ってからプログラミングを始めると、わりと楽にスタート出来るかと思います。 この記事がみなさんのお役に立ちましたら、下記「Share it」よりブックマークやSNSで共有していただければ幸いです。

C++:C標準ライブラリと主な関数のリスト(6) time.h

C言語の標準ライブラリの中から、日時に関する関数がセットになっているtime.hをまとめました。 time.h 時刻を取り扱う関数群。 これらの関数はunixの慣習から世界協定時刻(utc)における1970年1月1日0時0分0秒を基準としている。 time 書式time_t time(time_t *t); 引数time_t *t(時刻を格納する変数のアドレス) 戻り値基準時刻からの経過秒数 機能現在の時刻を基準時刻からの経過秒数で返す 補足引数を null で呼び出して戻り値だけを取得できる(環境によっては秒以外の単位を使うこともある) clock 書式clock_t clock(void); 引数なし 戻り値使用プロセス時間 機能プログラムが使用したプロセス時間を返す 補足clock() / clocks_per_sec とすることで秒単位の値を得られる 注意マルチスレッド環境では経過時刻と一致しない difftime 書式double difftime(time_t t1, time_t t2); 引数time_t t1(基準時刻からの経過秒数1)/time_t t2(基準時刻からの経過秒数2) 戻り値2つの経過秒数の差 機能時刻の引き算をする(環境によっては秒以外の単位を使うこともある) localtime 書式struct tm *localtime(const time_t *t); 引数const time_t *t(基準時刻からの経過秒数) 戻り値秒数を国内時刻情報に変換した構造体 機能基準時刻からの経過秒数を国内時刻に変換する 注意戻り値はシステム全体で共有されたメモリ領域なので、別途宣言した構造体にコピーしておくこと gmtime 書式struct tm *gmtime(const time_t *t); 引数const time_t *t(基準時刻からの経過秒数) 戻り値秒数を国際時刻情報に変換した構造体 機能基準時刻からの経過秒数を国際時刻に変換する 注意戻り値はシステム全体で共有されたメモリ領域なので、別途宣言した構造体にコピーしておくこと asctime 書式char *asctime(const struct tm *tm); 引数const struct tm *tm(時刻を格納した構造体) 戻り値時刻を変換した文字列の先頭アドレス 機能時刻を wed feb 17 20:14:04 1988 のような文字列に変換する 注意戻り値はシステム全体で共有されたメモリ領域なので、別途宣言した構造体にコピーしておくこと ctime 書式char *ctime(const time_t *t); 引数const time_t *t(基準時刻からの経過秒数) 戻り値時刻を変換した文字列の先頭アドレス 機能時刻を thu Oct 31 20:35:8 2013 のような文字列に変換する 注意戻り値はシステム全体で共有されたメモリ領域なので、別途宣言した構造体にコピーしておくこと strftime 書式size_t strftime(char *s, size_t smax, const char *fmt, const struct tm *tp); 引数char *s(文字配列)/size_t smax(文字配列のサイズ)/const char *fmt(時刻書式指定文字列)/const struct tm *tp(時刻を格納した構造体) 戻り値配列に書き込まれた文字数/失敗した場合は0 機能時刻を指定された書式通りに文字列に変換する さいごに この記事がみなさんのお役に立ちましたら、下記「Share it」よりブックマークやSNSで共有していただければ幸いです。

C++:C標準ライブラリと主な関数のリスト(5) math.h

C言語の標準ライブラリの中から、数学関数がセットになっているmath.hをまとめました。 math.h 基本的な数学関数群。 角度はラジアンで表される。度からラジアンへの変換は ラジアン = (度 * 3.14159 / 180) fabs 書式double fabs(double x); 引数double x(実数値) 戻り値絶対値 機能絶対値を計算する sqrt 書式double sqrt(double x); 引数double x(任意の実数値) 戻り値平方根 機能平方根を計算する pow 書式double pow(double x, double y); 引数double x(累乗される値)/double y(指数) 戻り値x を y 乗した値 機能累乗を求める fmod 書式double fmod(double x, double y); 引数double x(割られる数)/double y(割る数) 戻り値余り 機能実数値の余りを求める sin 書式double sin(double x); 引数double x(ラジアン単位の角度) 戻り値サイン値 機能サインを計算する cos 書式double cos(double x); 引数double x(ラジアン単位の角度) 戻り値コサイン値 機能コサインを計算する tan 書式double tan(double x); 引数double x(ラジアン単位の角度) 戻り値タンジェント値 機能タンジェントを計算する acos 書式double acos(double x); 引数double x(コサインの値) 戻り値アークコサイン(ラジアン)値 機能アークコサインを計算する asin 書式double asin(double x); 引数double x(サインの値) 戻り値アークサイン(ラジアン)値 機能アークサインを計算する atan 書式double atan(double x); 引数double x(タンジェントの値) 戻り値アークタンジェント(ラジアン)値 機能アークタンジェントを計算する 値は π÷2 の範囲となる。 atan2 書式double atan2(double y, double x); 引数double y(縦の値)/double x(横の値) 戻り値アークタンジェント(ラジアン)値 機能アークタンジェントを計算する 値は π の範囲となり、引数xが0でも計算できる sinh 書式double sinh(double x); 引数double x(ラジアン単位の角度) 戻り値ハイパボリックサイン値 機能ハイパボリックサイン値を計算する (exp(x) – exp(-x)) / 2 と同じ cosh 書式double cosh(double x); 引数double x(ラジアン単位の角度) 戻り値ハイパボリックコサイン値 機能ハイパボリックコサイン値を計算する (exp(x) + exp(-x)) / 2 と同じ tanh 書式double tanh(double x); 引数double x(ラジアン単位の角度) 戻り値ハイパボリックタンジェント値 機能ハイパボリックタンジェント値を計算する sinh(x) / cosh(x) と同じ ceil 書式double ceil(double x); 引数double x(任意の実数値) 戻り値入力値以上の整数値 機能実数値を整数値に丸める floor 書式double floor(double x); 引数double x(任意の実数値) 戻り値入力値以下の整数値 機能実数値を整数値に丸める exp 書式double exp(double x); 引数double x(実数値) 戻り値自然対数の底のx乗 機能指数を計算する log 書式double log(double x); 引数double x(任意の実数値) 戻り値自然対数値 機能自然対数を求める log10 書式double log10(double x); 引数double x(任意の実数値) 戻り値常用対数値 機能常用対数を求める modf 書式double modf(double x,… 続きを読む

C++:C標準ライブラリと主な関数のリスト(4) ctype.h

C言語の標準ライブラリの中から、文字を取り扱う関数がセットになっているctype.hをまとめました。 ctype.h 半角文字1文字を取り扱う関数群。マクロとして実現されていることが多い。 isalpha 書式int isalpha(int c); 引数int c(文字) 戻り値文字がアルファベットなら0以外/異なる場合は0 機能文字がアルファベットか判定する isupper 書式int isupper(int c); 引数int c(文字) 戻り値文字が英大文字なら0以外/異なる場合は0 機能文字が英大文字か判定する islower 書式int islower(int c); 引数int c(文字) 戻り値文字が英小文字なら0以外/異なる場合は0 機能文字が英小文字か判定する isdigit 書式int isdigit(int c); 引数int c(文字) 戻り値文字が数字なら0以外/異なる場合は0 機能文字が数字か判定する isspace 書式int isspace(int c); 引数int c(文字) 戻り値文字が空白文字なら0以外/異なる場合は0 機能文字が空白文字か判定する isalnum 書式int isalnum(int c); 引数int c(文字) 戻り値文字がアルファベットまたは数字なら0以外/異なる場合は0 機能文字がアルファベットまたは数字か判定する iscntrl 書式int iscntrl(int c); 引数int c(文字) 戻り値文字がコントロール文字なら0以外/異なる場合は0 機能文字がコントロール文字か判定する isgraph 書式int isgraph(int c); 引数int c(文字) 戻り値文字がスペース以外の印刷できる文字なら0以外/異なる場合は0 機能文字がスペース以外の印刷できる文字か判定する isprint 書式int isprint(int c); 引数int c(文字) 戻り値文字が印刷できる文字なら0以外/異なる場合は0 機能文字が印刷できる文字か判定する ispunct 書式int ispunct(int c); 引数int c(文字) 戻り値文字が区切り文字なら0以外/異なる場合は0 機能文字が区切り文字か判定する isxdigit 書式int isxdigit(int c); 引数int c(文字) 戻り値文字が16進数用の文字なら0以外/異なる場合は0 機能文字が16進数用の文字か判定する さいごに この記事がみなさんのお役に立ちましたら、下記「Share it」よりブックマークやSNSで共有していただければ幸いです。

C++:C標準ライブラリと主な関数のリスト(3) string.h

C言語の標準ライブラリの中から、文字列を処理する関数がセットになっているstring.hをまとめました。 string.h 主に文字列処理を行う関数群。汎用のメモリ処理と共用できる関数も多い。 半角文字が基準であるため、全角文字の処理に注意。 strcpy 書式char *strcpy(char *s, const char *t); 引数char *s(文字配列)/const char *t(文字列) 戻り値引数の文字配列をそのまま返す 機能文字配列に文字列をコピー(文字列の代入に使用)する strncpy 書式th> char *strncpy(char *s, const char *t, size_t n); 引数char *s(文字配列)/const char *t(文字列)/size_t n(最大コピー文字数) 戻り値引数の文字配列をそのまま返す 機能文字配列に指定文字数だけ文字列をコピーする 注意文字数が多い場合にはNULL文字を付加しないので、必ず s[n] = ‘¥0’; としてNULL文字を付加する strcat 書式char *strcat(char *s, const char *t); 引数char *s(文字配列)/const char *t(文字列) 戻り値引数の文字配列をそのまま返す 機能文字配列の後ろに文字列をつなげる strncat 書式char *strncat(char *s, const char *t, size_t n); 引数char *s (文字配列)/char *t(文字列)/size_t n(最大連結文字数) 戻り値引数の文字配列をそのまま返す 機能文字配列の後ろに指定文字数だけ文字列をつなげる strlen 書式size_t strlen(const char *s); 引数const char *s(文字列) 戻り値文字列の長さ(NULL文字は含まない) 機能文字列の長さを返す strcmp 書式int strcmp(const char *s, const char *t); 引数const char *s(文字列1)/const char *t(文字列2) 戻り値文字列1が大きいときは正/同じ時は0/文字列2が大きいときは負 機能文字列1と文字列2を比較する strncmp 書式int strncmp(const char *s, const char *t, size_t n); 引数const char *s(文字列1)/const char *t(文字列2)/size_t n(比較文字数) 戻り値文字列1が大きいときは正/同じ時は0/文字列2が大きいときは負 機能文字列を指定文字数だけ比較する strchr 書式char *strchr(const char *s, int c); 引数const char *s(文字列)/int s(文字) 戻り値見つかった位置のアドレス/見つからない場合はnull 機能文字列の先頭から文字を検索する strrchr 書式char *strrchr(const char *s, int c); 引数const char *s(文字列)/int c(文字) 戻り値見つかった位置のアドレス/見つからない場合はnull 機能文字列の後ろから文字を検索する strcspn 書式size_t strcspn(const char *s, const char *t); 引数const char *s(対象文字列)/const char *s(検索文字列) 戻り値見つかった位置までの文字数 機能対象文字列の中から検索文字列に含まれる文字を検索する strspn 書式size_t strspn(const char *s, const char *t); 引数const char *s(対象文字列)/const char*t(検索文字列) 戻り値見つからない位置までの文字数 機能対象文字列の中から検索文字列に含まれない文字を検索する strpbrk 書式char *strpbrk(const char *s, const char *t); 引数const char *s(対象文字列)/const char *t(検索文字列) 戻り値見つかった最初の文字へのポインタ/見つからない場合はnull 機能対象文字列の先頭から検索文字列に含まれる文字を検索する strstr 書式char *strstr(const char *s, const char *t); 引数const char *s(対象文字列)/const char *t(検索文字列) 戻り値見つかった位置へのポインタ/見つからない場合はnull 機能対象文字列から検索文字列を検索する strtok 書式char *strtok(char *s,… 続きを読む

C++:C標準ライブラリと主な関数のリスト(2) stdio.h

C言語の標準ライブラリの中から、汎用的な関数がセットになっているstdio.hをまとめました。 stdio.h ファイルの入出力に関連する関数がセットになったライブラリ。ディスク以外の周辺機器もファイルとして扱う。 また、規定のファイルポインタとしてこれらを扱うことも出来る。 ファイルポインタ stdin 標準入力(主にキーボード) stdout 標準出力(主にディスプレイ) stderr 標準エラー出力(ディスプレイ) fopen 書式FILE *fopen(const char *name, const char *mode); 引数const char *name(ファイル名)/const char *mode(モード文字列) 戻り値開いたファイルポインタ/失敗した場合はnull。 機能ファイルを開く モードr [読み込み]/w [新規]/a [追加]/bを付けることでバイナリ/+を付けることで入出力 fclose 書式int fclose( *fp); 引数*fp(ファイルポインタ) 戻り値成功した場合は0/失敗した場合はEOF 機能ファイルを閉じる fgetc 書式int fgetc( *fp); 引数*fp(ファイルポインタ) 戻り値読み出した文字/失敗したor終わりに到達した場合はEOF 機能ファイルから1文字読み出す fgets 書式char *fgets(char *s, int n, *fp); 引数char *s(文字列を格納するバッファ)/int n(1行の最大文字数)/ *fp(ファイルポインタ) 戻り値引数で指定したバッファ/失敗したor終わりに到達した場合はnull 機能ファイルから1行読み出す fputc 書式int fputc(int c, *fp); 引数int c(出力文字)/ *fp(ファイルポインタ) 戻り値出力文字/失敗した場合はEOF。 機能ファイルに1文字書き込む fputs 書式int fputs(const char *s, *fp); 引数const char *s(文字列)/ *fp(ファイルポインタ) 戻り値成功した場合は偽/失敗した場合は真 機能ファイルに文字列を書き込む。 fread 書式size_t fread(void *buf, size_t size, size_t nelem, *fp); 引数void *buf(読み込みデータ格納先のポインタ)/size_t size(読み込みデータ長)/size_t n(項目数)/ *fp(ファイルポインタ) 戻り値読み込んだ項目数/失敗した場合は0 機能ファイルから固定サイズの項目を読み込む fwrite 書式size_t fwrite(const void *ptr, size_t size, size_t nelem, *fp); 引数const void *ptr(書き込むデータへのポインタ)/size_t size(1項目のサイズ)/size_t size(項目数)/ *fp(ファイルポインタ) 戻り値書き込んだ項目数/失敗した場合は0 機能ファイルに固定サイズの項目を書き込む fprintf 書式int fprintf( *fp, const char *format, …); 引数*fp(ファイルポインタ)/const char *format(書式付き文字列)/…(可変個の変数) 戻り値出力文字数/失敗したときは負の値 機能ファイルに書式付き文字列を書き込む fscanf 書式int fscanf( *fp, const char *format, …); 引数*fp(ファイルポインタ)/const char *format(変換指定文字列)/…(可変個のバッファ) 戻り値変換に成功した数/失敗した場合は-1 機能ファイルから文字列を読み込み指定された形式に変換する。 ftell 書式long ftell( *fp); 引数*fp(ファイルポインタ) 戻り値現在のファイル位置 機能ファイル位置を取得する fseek 書式int fseek( *fp, long offset, int ptrname); 引数*fp(ファイルポインタ)/long offset(ファイル位置の移動数)/int ptrname(ファイル位置の基準) 戻り値成功した場合は0/失敗したときは0以外 機能ファイル位置を変更する 位置SEEK_SET(先頭)/SEEK_CUR(現在の位置)/SEEK_END(終わり) fgetpos 書式int fgetpos( *fp, fpos_t *ptr); 引数*fp(ファイルポインタ)/fpos_t *ptr(ファイル位置を格納する変数のポインタ) 戻り値成功した場合は0/失敗したときは0以外 機能現在のファイル位置を格納する fsetpos 書式int fsetpos( *fp, const fpos_t *ptr); 引数*fp(ファイルポインタ)/const fpos_t *ptr(ファイル位置を格納する変数のポインタ) 戻り値成功した場合は0/失敗したときは0以外 機能ファイル位置を変更する feof 書式int feof( *fp); 引数*fp(ファイルポインタ) 戻り値終わりに到達した場合は真/到達していない場合は偽 機能ファイルが終わりに到達したか調べる ferror 書式int ferror( *fp); 引数*fp(ファイルポインタ) 戻り値エラー発生した場合は真/発生していない時は偽 機能ファイルにエラーが発生したか調べる clearerr 書式void clearerr( *fp);… 続きを読む

C++:C標準ライブラリと主な関数のリスト(1) stdlib.h

C言語の標準ライブラリの中から、汎用的な用途の関数がセットになっているstdlib.hをまとめました。 stdlib.h 特に分類されない汎用的な関数の集まり。 メモリ関連、プロセス関連、変換など。 malloc 書式void *malloc(size_t n); 引数size_t(確保するメモリサイズ) 戻り値確保したメモリのアドレス/確保できなかった場合はnull 機能メモリを動的に確保する calloc 書式void *calloc(size_t int nmem, size_t elsize); 引数size_t int nemem(要素数)/size_t elsize(1要素のサイズ) 戻り値確保したメモリのアドレス/確保できなかった場合はnull 機能メモリを動的に確保する/確保したメモリはゼロクリアされる 注意callocで確保したメモリ領域はfreeで開放する realloc 書式void *realloc(void *ptr, size_t size); 引数void *ptr(確保したメモリのアドレス/size_t size(新しいメモリサイズ) 戻り値確保したメモリのアドレス/確保できなかった場合はnull 機能確保したメモリサイズを変更する(中身は維持) 補足メモリアドレスが変更される可能性があることに注意 free 書式void free(void *p); 引数void *p(確保したメモリのアドレス) 機能動的に確保したメモリを解放 abs 書式int abs(int n); 引数int n(数値) 戻り値数値の絶対値 機能絶対値を求める labs 書式long labs(long n); 引数long n(数値) 戻り値数値の絶対値 機能絶対値を求める atof 書式double atof(const char *s); 引数const char *s(数字を含む文字列) 戻り値変換後の値/変換できない場合は0 機能数字を含む文字列を実数値に変換する atoi 書式int atoi(const char *s); 引数const char *s(数字を含む文字列) 戻り値変換後の値/変換できない場合は0 機能数字を含む文字列を整数値に変換する atol 書式long atol(const char *s); 引数const char *s(数字を含む文字列) 戻り値変換後の値/変換できない場合は0 機能数字を含む文字列を整数値に変換する strtod 書式double strtod(const char *s, char **endptr); 引数const char *s(数字を含む文字列/char **endptr(終了位置のアドレス) 戻り値変換後の値/変換できない場合は0 機能数字を含む文字列を実数値に変換する strtol 書式long strtol(const char *s, char **endptr, int base); 引数const char *s(数字を含む文字列)/char **endptr(終了位置のアドレス)/int base(数値の基数・2進数や16進数) 戻り値変換後の値/変換できない場合は0 機能数字を含む文字列を整数値に変換する strtoul 書式unsigned long strtoul(const char *s, char **endptr, int base); 引数const char *s(数字を含む文字列)/char **endptr(終了位置のアドレス)/int base(数値の基数・2進数や16進数) 戻り値変換後の値/変換できない場合は0 機能数字を含む文字列を符号無し整数値に変換する div 書式div_t div(int num, int denom); 引数int num(割られる数)/int denom(割る数) 戻り値割り算の結果 機能商と余りを同時に計算する 構造体div_t(構造体)int quot(商)/int rem(余り) 補足divより、演算子 / や % を使うことを推奨 ldiv 書式ldiv_t ldiv(long num, long denom); 引数long num(割られる数割る数) 戻り値割り算の結果 機能商と余りを同時に計算 構造体ldiv_t.(構造体)/long quot(商)/ long rem(余り) 補足ldivより、演算子 / や % を使うことを推奨 rand 書式int rand(void); 戻り値ランダムな値 機能乱数を得る 使用法#define random(min,max) ((min)+(int)(rand()/(float)rand_max*((max)-(min)+1))) とすれば、min 〜 max 間の乱数を得られる。 srand 書式void srand(unsigned int seed); 引数unsigned int seed(乱数系列の初期値) 機能乱数系列の初期値を与える 使用法srand((unsigned int)time(0)); exit 書式void exit(int… 続きを読む

C++:ポインタの概要(2)>参照について – 参照仮引数

CやC++において重要なポインタに関連する機能である参照についてのメモ。 ここで言う参照とは、変数とは別の名前で機能する暗黙的なポインタのことで、参照とポインタは別のものなので注意。 参照について(1) 参照には次の3つの用途がある。 参照の3つの用途 参照は関数に渡すことができる 関数から参照を返すことができる 独立した参照(独立参照)を定義することができる(※) 今回は1番目の「参照は関数に渡すことができる」についての説明。 ※3つ目の独立した参照に関しては一般的ではないため説明は割愛する。 参照を関数に渡す 以下は関数の引数にポインタと参照を使用した場合のそれぞれのサンプルコード。 引数がポインタの場合 ※デストラクタはmyfunc()終了時の「オブジェクトのコピーが破棄された時」と、「プログラム終了時」の2回呼び出される。 オブジェクトの参照による引渡し ※参照(仮参照引数)を使用してオブジェクトを引き渡すと、関数実行時に引渡しのオブジェクトのコピーが作成されないため、デストラクタの呼び出しはプログラムの終了時の1回だけとなる。 まとめ 参照はポインタではないので、メンバにアクセスするときにはドット演算子を使用する。次回は関数から参照を返すサンプルコードと参照を返すことのメリットを執筆予定。 この記事がみなさんのお役に立ちましたら、下記「Share it」よりブックマークやSNSで共有していただければ幸いです。

Algorism:1次元配列の要素をソートする

配列をソートするためのアルゴリズムの中から基本のバブルソートをC++でメモ。 アルゴリズムサンプル 入力した5つの整数値を大きい順に並び替える #include using namespace std; int main(int argc, const char * argv[]) { int num = 5; int my_array[num]; int i; cout