请高手解释下面几句C++语句,谢谢了!

来源:百度知道 编辑:UC知道 时间:2024/07/07 23:59:22
class MeanValue
{
private:
int a,b;
public:
MeanValue() :a(0),b(0){}
void operator()(int elem)
{
a++;
b+=elem;
}
operator double()
{
return static_cast<double>(b)/static_cast<double>(a);//这句是什么意思,运用了什么技术呢?
//它是不是操作符重载呢?他是重载的什么呢?
}

};
我说的是:operator double()这句!
那operator double()与void operator()有什么区别呢?

关于重载,是的,operator double()重载的是强制类型转换操作符,算操作符重载。

该操作符作用在MeanValue类的实例上时,返回其成员b和a的商值。

static_cast是C++中加入的类型转换操作,它在编译时使用类型信息执行转换,在转换执行必要的检测(诸如指针越界计算,类型检查),操作数相对是安全的。功能与旧式的类型转换(如 (int)a 之类)类似,但是多了一些必要的检查机制。

因此return static_cast<double>(b)/static_cast<double>(a);
相当于 return (double)b/(double)a; 只是安全些。

------------

题外话:这个MeanValue类写得有点问题,没有加入除数为0的判断。

上面那个叫运算子 你查查相关资料吧 是做类型转换的
static_cast是静态转换子

哦 是运算符重载 当你使用double(a)这种句式的时候 其实也是属于运算的一种 所以那是运算符重载