美文网首页
(二十二)C++篇-重载操作符与转换

(二十二)C++篇-重载操作符与转换

作者: GoodTekken | 来源:发表于2022-07-06 11:17 被阅读0次

C++ 允许我们重定义操作符用于类类型对象时的含义。如果需要,可以像内置转换那样使用类类型转换,将一个类型的对象隐式转换到另一类型。明智地使用操作符重载可以使类类型的使用像内置类型一样直观。

大多数重载操作符可以定义为普通非成员函数类的成员函数
作为类成员的重载函数,其形参看起来比操作数数目少 1。作为成员函数的操作符有一个隐含的 this 形参,限定为第一个操作数。

cout << item1 + item2 << endl;
这个表达式隐式调用为 Sales_items 类定义的 operator+。也可以像调用普通函数一样调用重载操作符函数,指定函数并传递适当类型适当数目的形参:
// equivalent direct call to nonmember operator function
cout << operator+(item1, item2) << endl;
这个调用与 item1 和 item2 相加的表达式等效。

item1 += item2; // expression based "call"
item1.operator+=(item2); // equivalent call to member operator function
两个语句都将 item2 的值加至 item1。第一种情况下,使用表达式语法隐式调用重载操作符函数:第二种情况下,在 item1 对象上调用成员操作符函数。

重载操作符的设计
(1)不要重载具有内置含义的操作符
赋值操作符、取地址操作符和逗号操作符对类类型操作数有默认含义。如果没有特定重载版本,编译器就自己定义以下这些操作符。

(2)赋值必须返回对 *this 的引用

// assumes that both objects refer to the same isbn
Sales_item& Sales_item::operator+=(const Sales_item& rhs)
{
units_sold += rhs.units_sold;
revenue += rhs.revenue;
return *this;
}

(3)下标操作符
可以从容器中检索单个元素的容器类一般会定义下标操作符,即operator[]。标准库的类 string 和 vector 均是定义了下标操作符的类的例子。
下标操作符必须定义为类成员函数。
下面的类定义了下标操作符。为简单起见,假定 Foo 所保存的数据存储在
一个 vector<int>: 中:

class Foo {
public:
int &operator[] (const size_t);
const int &operator[] (const size_t) const;
// other interface members
private:
vector<int> data;
// other member data and private utility functions
};

下标操作符本身可能看起来像这样:

int& Foo::operator[] (const size_t index)
{
return data[index]; // no range checking on index
}
const int& Foo::operator[] (const size_t index) const
{
return data[index]; // no range checking on index
}

相关文章

  • Kotlin --- Operator Overloading

    简述 Kotlin的操作符重载与C++类似,虽然没有C++那么强大,但是仍然可以实现Kotlin的操作符重载。 操...

  • (二十二)C++篇-重载操作符与转换

    C++ 允许我们重定义操作符用于类类型对象时的含义。如果需要,可以像内置转换那样使用类类型转换,将一个类型的对象隐...

  • C++ 操作符重载

    重载算数操作符 重载操作符[] 重载关系操作符 重载类型转换操作符 重载输入输出操作符 引例 用一个类Fracti...

  • C++基础-(重载)

    C++基础 重载 哪些运算符可以被重载:::,.,->,*,?:不能被重载 重载操作符的标志(operator) ...

  • C++中的操作符重载

    操作符重载 C++中的重载能够扩展操作符的功能 操作符的重载以函数的方式进行 本质:用特殊形式的函数扩展操作符的功...

  • C++学习笔记(七)操作符重载(上)

    1、基本操作符重载 操作符重载指的是将C++提供的操作符进行重新定义,使之满足我们所需要的一些功能。 在C++中可...

  • C++ 操作符重载

    操作符重载 操作符的重载是在实际的C++编程过程中不太容易引人注意但却非常实用的一个特性。合理的实现操作符重载可以...

  • 《C++ Primer Plus》第11章学习笔记

    内容思维导图 1. 操作符重载 操作符重载(Operator overloading)是一种形式的C++多态。第8...

  • 1.2.20_C++ 下标运算符 [] 重载

    C++ 重载运算符和重载函数 下标操作符 [] 通常用于访问数组元素。重载该运算符用于增强操作 C++ 数组的功能...

  • Geekband C++ 第五周

    概述 C++模板简介 函数模板 C++类模板 操作符重载 泛型编程 容器

网友评论

      本文标题:(二十二)C++篇-重载操作符与转换

      本文链接:https://www.haomeiwen.com/subject/ipaebrtx.html