operator 的两种用法

本文深入探讨了C++中操作符重载(operator overloading)和操作符隐式转换(operator casting)的使用方法及实例。通过具体代码示例展示了如何重载算术操作符和函数对象,以及如何实现类间的隐式转换。

C++,有时它的确是个耐玩的东东,就比如operator,它有两种用法,一种是operator overloading(操作符重载),一种是operator casting(操作隐式转换)。

1、操作符重载
C++可以通过operator实现重载操作符,格式如下:类型T operator 操作符 (),比如重载+,比如下面这个例子
template<typename T> class A
{
public:
     const T operator+(const T& rhs)
     {
         return this->m_ + rhs;
     }
private:
     T m_;
};

又比如STL中的函数对象,重载(),比如下面这个例子
template<typename T> struct A
{
   T operator()(const T& lhs, const T& rhs){ return lhs-rhs; }
};


2、 操作隐式转换
C++可以通过operator实现重载隐式转换,格式如下: operator T (),其中T是一个类型,比如下面这个例子
class A
{
public:
   operator   B*() { return this->b_; } 
   operator const   B*() { return this->b_; }
   operator   B&() { return *this->b_; }
private:
   B* b_;
};

A a;
if(a),编译时,它转换成if(a.operator B*()),其实也就是相当于 if(a.b_)

转载于:https://www.cnblogs.com/Browneyes/p/6087301.html

C++编程语言中,operator重载是扩展运算符功能的方法,其含义在于让自定义类型也能像内置类型一样使用各种操作符。C++已经为基本类型和标准库中的数据类型提供了运算符操作,但对于自定义数据类型,有时就需要重载运算符来实现类似功能,此时可以把operator ==、operator=、operator*等操作符整体看作一个函数名 [^2][^3]。 对于内置类型变量,可以直接运用操作符,编译器会做相应处理;而对于自定义类型,如日期类,若要使用操作符,往往需要operator函数对操作符进行重载,涉及的操作符包括">", "<", ">=", "<=", "==", "!="等 [^1]。 使用operator重载运算符,能使重载后的运算符的使用方法与重载前一致,并且扩展运算符的功能只能通过函数的方式实现(实际上,C++中各种“功能”都是通过函数实现的) [^2]。 以输出运算符重载为例,以下是代码实现: ```cpp #include <iostream> using namespace std; class person { public: string p_name; int p_age; person():p_name(""),p_age(0) { } person(string name,int age):p_name(name),p_age(age) { } // 成员函数重载 << 运算符 #if 1 void operator<<(person &p) { cout << "姓名" << p_name << endl; cout << "年龄" << p_age << endl; } #endif }; // 全局函数重载 << 运算符 ostream &operator<<(ostream &out,const person &p) { out << "姓名:" << p.p_name << endl; out << "年龄:" << p.p_age << endl; return out; } void test1() { person p1("zhangsan",100); cout << p1 << endl; } int main(int argc, char *argv[]) { test1(); return 0; } ``` 在上述代码中,通过成员函数和全局函数两种方式对`<<`运算符进行了重载,使得`person`类的对象可以直接使用`<<`操作符进行输出 [^4]。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符  | 博主筛选后可见
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值