首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C++ >

关于自动重载的有关问题

2012-02-25 
关于自动重载的问题不太看得懂这个自动重载的程序。特别是函数g(1)的参数为什么可以是int??请高手帮忙解释,

关于自动重载的问题
不太看得懂这个自动重载的程序。特别是函数g(1)的参数为什么可以是int??请高手帮忙解释,谢谢了!
class One{
int i;
public:
One(int ii=0,int=0):i(ii){}
};

class Two{
int x;
public:
Two(int xx):x(xx){};
operator One() const {return One(x);}
};

void g(One){}

int _tmain(int argc, _TCHAR** argv)
{
Two two(2);
g(two);
g(1);
}

[解决办法]
class One{
int i;
public:
explicit One(int ii=0,int=0):i(ii){} //加explicit, 要求只能显式调用
};

class Two{
int x;
public:
Two(int xx):x(xx){};
operator One() const {return One(x);}
};

void g(One){}

int _tmain(int argc, _TCHAR** argv)
{
Two two(2);
g(two);
g(1); //自动调用One的构造函数,编译失败,因为只能要求显式调用
g(One(1));//显式调用成功
}

[解决办法]
g(1)

因为 

One(int ii=0,int=0):i(ii){} 

所以 

1 可以隐式转换成 One


[解决办法]
楼上的正解,
当你传一个整数的时候,编译器发现不是这个函数需要的参数,会对其进行类型转换。而此时,恰好可以通过One(1)
构造一个One对象出来.

热点排行