として、int
を取るコンストラクタを書く:、
void f(Integer);
f(Integer(1)); //okay
f(1); //this is also okay!
説明は、あなたがf(1)
を書くときということです:クラスInteger
は、このコンストラクタを持っている場合は、あなたがこれを行うことができ、その後、
class Integer
{
public:
Integer(int);
};
Integer
のコンストラクタは、タイプint
の単一の引数をとり、自動的に呼び出され、その場で一時的に作成され、その一時的なものがfunctiに渡されますに!あなたが必要とするすべてがある
void g(int); //NOTE: this takes int!
Integer intObj(1);
g(intObj); //passing an object of type Integer?
上記のコードを動作させるには、:
は今、つまり、関数にタイプInteger
のオブジェクトを渡すとint
を取るあなたは正反対をしたいと仮定しますだから01を取る関数にタイプInteger
のオブジェクトを渡すとき
class Integer
{
int value;
public:
Integer(int);
operator int() { return value; } //conversion function!
};
:のように、クラスのユーザ定義の変換関数を定義しますの場合、変換関数が呼び出され、オブジェクトの暗黙性がint
に変換され、引数として関数に渡されます。
int i = intObj; //implicitly converts into int
//thanks to the conversion function!
として、あなたの変換演算子を宣言するのconstオブジェクトに
を変換することはできません 思う。 – Puppy
あなたが何を提案しているかわからないが、私はリターンを持っている(n <2)? 1:IntegerFromACall;これは私にエラーを与えます:オペランドは?:異なる型 'int'と 'Integer'を持っています –
@ハムザ:これを書いてください: 'return(n <2)? 1:(整数)IntegerFromACall; '...これは動作します! – Nawaz