函数调用运算符

struct absInt{
    int operator()(int val) const{
        return val < 0 ? -val:val;
    }
};

这个类定义了操作:函数调用运算符,它负责接受一个int类型的实参,然后返回该实参的绝对值。调用:

int i=-42;
absInt absObj;  //含有函数运算符的对象
int ui = absObj(i); //将i传递给absObj.operator()
class PrintString{
public:
    PrintString(ostream &o = cout, char c = ' '):
        os(o), sep(c) { }
    void operator()(const string &s) const { os << s << sep; }
private:
    ostream &os;   //用于写入的目的刘
    char sep;      //用于将不同输出隔开的字符
}

类型转换运算符

举个例子,我们定义一个简单的类,令其表示0到255之间的一个整数:
class SmallInt{
public:
    SmallInt(int i = 0); val(i)
    {
        if(i<0 || i>255)
            throw std::out_of_range("Bad SmallInt value");
    }
    operator int() const {return val;}
private:
    std::size_t val;
};

上面的类拥有两种转换能力,一是将int类型的值转换为类类型,这是通过构造函数完成的,二是将int类型转换为类类型。

SmallInt si;
si = 4;   //首先将4隐式的转换成SmallInt,然后调用SmallInt::operator=
si + 3;   //首先将si隐式转换成int,然后执行整数的加法

类类型定义的转换:类类型能定义由编译器自动执行转换,不过编译器每次只能执行一种类型的转换。

//内置类型转换将double实参转换为int
SmallInt si = 3.14;  
si + 3.14;

上面的转换中,先执行内置的数据类型转换,再执行类类型转化,一共执行了两次数据类型转换

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值