アフィリエイト広告を利用しています

広告

posted by fanblog

2017年10月29日

《その97》 ユーザ定義変換


ユーザ定義変換

 ユーザ定義変換とは、変換コンストラクタ と 変換関数の総称です。

 次のヘッダ boolean.h は、組込み型の bool型を模した クラス Boolean を定義しています。
このプログラムコードとコメント文によって、

   変換コンストラクタ
   変換関数
   ユーザ定義変換

を、説明してみました(理解できる説明になっていればいいのですが…)。


// boolean.h
#ifndef ___Class_Boolean
#define ___Class_Boolean

#include <iostream>

/* --- 組込み型の bool型を模した クラス Boolean --- */
class Boolean {
public:
enum boolean {False, True};
/*

列挙体 boolean
※ 列挙子 False, True の型は boolean型
boolean型はクラス内部で定義した型で、組込み型のbool型とは無関係。)
列挙子 False には整数値 0 が、列挙子 True には整数値 1 が割り振られる。
*/

private:
boolean v; // boolean型のデータメンバ v

public:
Boolean() : v(False) { } // デフォルトコンストラクタ(Falseで初期化)
Boolean(int val) : v(val == 0 ? False : True) { }
/*

変換コンストラクタ [★1] … 単一の引数で呼び出せるコンストラクタ。
int型から boolean型に変換する。
*/


operator int() const { return v; }
/*

boolean型から int型への変換関数 [★2]
※ v は boolean型の列挙子 False または True
False は整数値としては 0、True は整数値としては 1 である。)
*/


operator const char*() const { return v == False ? "False" : "True"; }
/*

boolean型から 文字列 const char*型への変換関数
文字列リテラル "False", "True" は静的記憶域期間を持つ。
( クラス内部の "False", "True" は、クラスの外でも有効な文字列リテラル。)
*/

};

inline std::ostream& operator<<(std::ostream& s, Boolean& x) {
return s << static_cast<const char*>(x);
}
/*

演算子関数 operator<<
ヘッダ内であってもクラス定義の外で定義された関数は外部結合
を持つため、inline を付けて内部結合を持たせる必要がある。

*/


#endif

/*
ユーザ定義変換 ・ ・ ・ 変換コンストラクタ と 変換関数の総称
変換コンストラクタ [★1] と 変換関数 [★2] が揃うと、
int型と boolean型の間で型変換が相互に可能になる
。)
*/



新版 明解C 入門編 (明解シリーズ)

新品価格
¥2,916から
(2017/8/30 21:02時点)









--
この記事へのコメント
コメントを書く

お名前:

メールアドレス:


ホームページアドレス:

コメント:

※ブログオーナーが承認したコメントのみ表示されます。

この記事へのトラックバックURL
https://fanblogs.jp/tb/6910876
※ブログオーナーが承認したトラックバックのみ表示されます。

この記事へのトラックバック

 たまに、クリック お願いします m(_ _)m

 AA にほんブログ村 IT技術ブログ C/C++へ

こうすけ:メール kousuke_cpp@outlook.jp

【1】★★C++ 記事目次★★ ← 利用可能です。
・新版明解C++入門編 / 新版明解C++中級編
・その他 C++ 関連記事

【2】★★こうすけ@C#★★
・C# の初歩的な記事


検索
<< 2018年08月 >>
      1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31  
プロフィール
こうすけさんの画像
こうすけ

 たまに、クリック お願いします m(_ _)m

 AA にほんブログ村 IT技術ブログ C/C++へ

こうすけ:メール kousuke_cpp@outlook.jp

【1】★★C++ 記事目次★★ ← 利用可能です。
・新版明解C++入門編 / 新版明解C++中級編
・その他 C++ 関連記事

【2】★★こうすけ@C#★★
・C# の初歩的な記事


×

この広告は30日以上新しい記事の更新がないブログに表示されております。