0

我制作了一个简单的类,只是为了尝试 C++ 中的转换构造函数。

它显然可以工作,但是在执行某个操作时,编译器似乎没有调用它。我会知道为什么,或者也许我错了。

#include <iostream>
using std::cout; using std::endl;

class CostruttoreConversione
{
public:  
  CostruttoreConversione(int val = 0)
  {
    cout << "Costruttore chiamato" << endl;
    valore = val;
  }

  inline int getValore(){
    return valore; 
  }

  CostruttoreConversione provaConversioneImplicita()
  {
    return -10; //here the type *should* be converted; doesn't happen.
  } 

private:
  int valore;
};

int main(void){
  CostruttoreConversione obj(10);
  cout << "obj = " << obj.getValore() << endl;
  obj = 20; //WORKS 
  cout << obj.getValore() << endl;
 // cout << obj.provaConversioneImplicita() << endl; doesn't work.
  return 0;
}
4

3 回答 3

2

构造应该可以工作,但是输出操作失败了,因为您还没有为您的类定义输出运算符。

你仍然可以做例如

cout << obj.provaConversioneImplicita().getValore() << endl;

或者您定义一个输出运算符:

inline std::ostream& operator<<(std::ostream& os, const CostruttoreConversione& cc)
{
    os << cc.getValore();
    return os;
}
于 2013-08-17T16:04:51.680 回答
1

您可以重载转换运算符,以便 CostruttoreConversione 可以转换为 int。

class CostruttoreConversione{
  operator int() const{
     return valore;
  }
}

还要写一个拷贝构造函数

于 2013-08-17T16:06:05.533 回答
0

默认构造函数和参数化构造函数共同构成一个转换构造函数。例如,如果您正在编写一个创建 ADT 数组的程序,当您在函数 main 中声明数据类型为数组的变量时,main 会调用参数化构造函数,该构造函数将数组转换为您用于开发数组的数据类型。所以间接转化正在发生。因此不调用转换构造函数。但是默认构造函数和参数化构造函数在内部进行转换。

于 2013-08-17T16:06:20.397 回答