C++-クラス定義タイプ変換(type convertion)の詳細


クラス定義タイプ変換(type convertion)
 
本住所:http://blog.csdn.net/caroline_wendy/article/details/15498591
 
クラスの変換オペレータ(conversion operator)、形式:operator type()const;ClassA->type;すなわち、クラス内のメンバー変数の出力がtypeタイプである.
注意型式では、関数体は戻り値とパラメータを宣言していませんが、関数体では戻り(return)変換が必要な値typeを返します.
typeをClassAに変換すると、ClassAのコンストラクタによって付与され、間接的に得られるが、保証クラスにはtypeとメンバー変数の間の変換に相当する1つのメンバー変数しか含まれていない.
暗黙的(implicit)変換を防ぐには、explicit制限語を追加して、変換を表示し、使用する場合はstatic_を追加する必要があります.cast()操作;
explicit制限語を使用すると、整数タイプではClassA->type->boolなどの条件(condition)での暗黙的な変換を避けることができます.
必要に応じて、表示変換、static_を使用できます.cast(ClassA)は、デフォルトでは整数型からbool型に変換する.
boolタイプ変換は、explicitを追加することが望ましい、boolタイプを整数型とする変換を阻止することができる.
コードは次のとおりです.
/*   * CppPrimer.cpp   *   *  Created on: 2013.11.11   *      Author: Caroline   */    /*eclipse cdt*/    #include <iostream>  #include <stdexcept>  #include <cstddef>    using namespace std;    class SmallInt {  public:  	SmallInt(int i = 0) : val(i) { //int -> SmallInt  		if(i<0 || i>255)  			throw std::out_of_range("Bad SmallInt value");  		std::cout << "Hello, girl, this is int to SmallInt. " << std::endl;  	}  	explicit operator int() const { //SmallInt -> int,     		std::cout << "Hello, girl, this is SmallInt to int. " << std::endl;  		return val;  	}  private:  	std::size_t val;  };    int main (void) {    	SmallInt si;  	si = 4;  	SmallInt si1 = 3.14;  	while(static_cast<int>(si1)) { //      		std::cout << "this is a condition" << std::endl;  		break;  	}    	return 0;    }