C++新手理解类成员函数
#include <iostream>
using namespace std;
class Number{
float f;
public:
Number(float ff=0.0f):f(ff){}
Number& operator=(const Number& n){
f = n.f;
return *this;
}
operator float() const{return f;}
friend ostream&
operator<<(ostream& os,const Number& x){
return os << x.f;
}
};
各位高手,这个类写入一个文件number.cpp能够用命令:g++ -Wall -c number.cpp编译成功,但是我不理解
operator float() const{return f;}的意思,这个函数怎么返回operator类型呢?这是怎么回事?
跪求高手帮助解答!多谢!
[解决办法]
C++中关键字operator除了提供运算符重载之外,还提供类型转换能力。
例如:
class A::operator float() {
...
}
可以将*this对象转化为float类型。这是C++中一个非常重要的特性,也比较
复杂,以下是一些规则,篇幅所限不便展开,建议你找有关书籍全面了解。
简单规则如下:
1)所有类型转换函数均无返回类型声明,但返回一个值,其类型应与声明吻合。
2)在运行中要求进行隐式类型转换时,对象按上下文需求调用相应的类型转换函数,
自动转化为该类型。
3)如果在客户代码中使用了强制类型转换,则类必须提供相应的类型转换函数。
简单地说,如果程序中有 (long)obj 语句,你必须显式提供 operator long(),
只提供 operator int(), 然后指望obj先转换为int,再自动转换为 long,那
是行不通的。
4)如果类定义了一系列类型转换函数,而在客户代码中有含义不清的上下文,也就是
说多个类型转换函数都可以满足需求,则编译器会因为不知道该调用那个类型转换
函数而报错。
[解决办法]
operator 在C++中的语法比较特殊,不能当普通函数理解。个人感觉是设计时的一个败笔,跟函数指针一样。
你可以对照常规的操作符来理解。
operator float() const{return f;}
operator<<(ostream& os,const Number& x) {return os << x.f;}
这里的float()不是函数名,而和<<一样都是一种操作符。
定义了float()操作符后,就可以把Number对象转化成浮点数了。用法大概是:
Number a;
float b = float(a);
float c = (float)a;