`
sealbird
  • 浏览: 584117 次
  • 性别: Icon_minigender_1
  • 来自: 广州
社区版块
存档分类
最新评论

C++技巧之operator操作符

    博客分类:
  • C++
阅读更多

这篇博文是以前很久写的,贴在我的早期一个blog中,今天google一下,发现还真有不少人转载,可惜并不注明出处。那时觉得operator比较好玩。C++有时它的确是个耐玩的东东。operator它有两种用法,一种是operator overloading(操作符重载),一种是operator casting(操作隐式转换)。

1.operator overloading
C++可以通过operator 重载操作符,格式如下:类型T operator 操作符 (),如比重载+,如下所示

view plaincopy to clipboardprint?
template<typename T> class A   
{   
public:   
    const T operator + (const T& rhs)   
    {   
     return this->m_ + rhs;   
    }   
private:   
    T m_;   
};  
template<typename T> class A
{
public:
    const T operator + (const T& rhs)
    {
     return this->m_ + rhs;
    }
private:
    T m_;
};

又比如STL中的函数对象,重载(),这是C++中较推荐的写法,功能与函数指针类似,如下所示
view plaincopy to clipboardprint?
template<typename T> struct A   
{   
   T operator()(const T& lhs, const T& rhs){ return lhs-rhs;}   
};  
template<typename T> struct A
{
   T operator()(const T& lhs, const T& rhs){ return lhs-rhs;}
}; 

2 operator casting
C++可以通过operator 重载隐式转换,格式如下: operator 类型T (),如下所示
view plaincopy to clipboardprint?
class A   
{   
public:   
   operator B* () { return this->b_;}    
   operator const B* () const {return this->b_;}       
   operator B& () { return *this->b_;}   
   operator const B& () const {return *this->b_;}    
  
private:   
   B* b_;   
};  
class A
{
public:
   operator B* () { return this->b_;} 
   operator const B* () const {return this->b_;}    
   operator B& () { return *this->b_;}
   operator const B& () const {return *this->b_;} 

private:
   B* b_;
}; 

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


本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/szlanny/archive/2009/06/24/4295854.aspx
分享到:
评论

相关推荐

    C++ 操作符重载

    在C++编程语言中,操作符重载是一种特殊的功能,允许程序员为已有的运算符赋予新的含义,以便在自定义类型上使用。这使得代码更加直观和自然,尤其是在处理复杂数据结构时。本主题将深入探讨操作符重载的概念、语法...

    C++编写的操作符重载实例

    ### C++操作符重载实例解析 #### 一、引言 操作符重载是C++语言中的一个重要特性,它允许我们对已有的操作符赋予新的含义,使其能够用于自定义的数据类型。本文将通过一个具体的例子——分数类的操作符重载——来...

    C++关键字和操作符替代名

    ### C++关键字和操作符替代名 #### 概述 在C++编程语言中,关键字是具有特定含义的预定义标识符,它们被语言保留用于构成语法结构的关键部分。此外,C++还支持一系列操作符,包括算术、比较、逻辑等类型。为了提高...

    C++ operator关键字(重载操作符)的用法详解

    C++中的`operator`关键字用于实现操作符重载,这是C++语言中一个重要的特性,允许程序员自定义已有的运算符行为,以便于类对象能够更自然地进行各种操作。操作符重载使得用户定义的类型可以像基本数据类型一样进行...

    C++ 中重载 + 操作符的正确方法

    ### C++ 中重载 + 操作符的正确方法 #### 引言 在C++编程中,重载操作符是一项非常实用且强大的功能,能够帮助程序员以自然的方式处理自定义数据类型。对于像`+`这样的操作符而言,正确地进行重载尤为重要,因为它...

    C++操作符重载

    在C++编程语言中,操作符重载是一种特殊的功能,允许程序员为已有的运算符赋予新的含义,以便在用户自定义的数据类型上使用。这使得我们可以以自然且直观的方式处理对象,增强了代码的可读性。操作符重载并不创建新...

    c++操作符重载

    ### C++操作符重载详解 C++是一种强大的面向对象编程语言,提供了众多特性来增强其功能性和灵活性,其中操作符重载就是一项关键特性。本文将深入探讨C++中的操作符重载,包括其基本概念、重载规则以及如何在实际...

    C++操作符重载专题

    ### C++操作符重载专题 #### 一、引言 C++作为一种强大的面向对象编程语言,提供了多种机制来帮助开发者构建复杂的应用程序。其中一项关键特性便是**操作符重载**。通过这一特性,开发者能够对现有操作符赋予新的...

    C++操作符重载手册

    本手册将详细阐述C++中操作符重载的相关规则、建议以及如何重载`operator new`。 **一、操作符重载规则** 1. **可重载的操作符** 包括基本的算术运算符(`+ - * / % ^ & | ~ !`),比较运算符(`&lt; &gt; &lt;= &gt;= == !=`...

    c++ operator重载

    在C++中,操作符重载是一项非常重要的功能,它允许用户自定义现有操作符的行为,使其能用于自定义的数据类型。这对于提高代码的可读性和简化编程任务特别有用。例如,在处理复数时,我们希望使用类似`+`这样的符号来...

    c++(6)操作符重载

    ### 操作符重载:C++中的赋值运算符与比较运算符 #### 一、赋值运算符重载 在C++编程语言中,赋值运算符`=`用于将一个对象的值复制到另一个对象中。对于基本数据类型如整型、浮点型等,这种复制通常是直接且无害的...

    new操作符(new operator)和operator new的区别

    在C++编程中,`new`操作符和`operator new`是两个密切相关但不完全相同的概念,它们在内存管理和对象创建方面各自承担着特定的角色。 `new`操作符是C++语言内置的关键字,用于在堆上动态分配内存并创建对象。当执行...

    实现操作符重载 实现操作符重载

    在C++编程语言中,操作符重载是一种重要的特性,它允许我们为自定义类型定义已有的运算符的行为。操作符重载并不意味着创建新的运算符,而是为现有的运算符赋予新的含义,使得它们可以作用于自定义类型的对象。本文...

    C++操作符重载专题 超高清 超详细

    操作符重载是C++编程语言中一种强大的特性,它允许开发者为自定义类型赋予常用操作符如加、减、乘、除等新的含义。通过操作符重载,我们可以像操作基本数据类型一样操作自定义的对象,这不仅提高了代码的可读性和...

    39114_20170620200252_C++操作符重载_

    在C++编程语言中,操作符重载是一种特殊的功能,允许我们为自定义类型赋予与内置类型(如整型或浮点型)相同的操作符含义。通过操作符重载,我们可以使用户定义的类更加直观和易用,因为它能够遵循程序员熟悉的运算...

    C++ operator两种用法.docx

    C++中的operator有两种用法:operator overloading(操作符重载)和operator casting(操作隐式转换)。下面我们将分别介绍这两种用法。 一、operator overloading(操作符重载) operator overloading是C++中的一...

    为什么operator=操作符返回引用.docx

    在C++编程语言中,`operator=`操作符用于对象之间的赋值。这个操作符的返回类型通常是类类型的引用,这是为了支持链式赋值(chaining assignment)和保持与原始对象的连接。以下是对`operator=`操作符返回引用的详细...

    C++ 分数与整数的混合运算 操作符重载

    在C++编程中,操作符重载是一种强大的特性,它允许我们为自定义类型赋予标准操作符的行为。在这个场景中,我们关注的是如何通过操作符重载来实现分数与整数的混合运算,包括正负数的处理。下面将详细探讨这个主题。 ...

Global site tag (gtag.js) - Google Analytics