C++ 面试题 目录

C++ 中什么是运算符重载 (operator overloading)?

推荐答案

运算符重载(Operator Overloading)是 C++ 中的一种特性,允许程序员为自定义类型(如类或结构体)重新定义或重载已有的运算符行为。通过运算符重载,可以使自定义类型的对象能够像内置类型一样使用运算符进行操作,从而增强代码的可读性和简洁性。

例如,可以通过重载 + 运算符来实现两个自定义对象的相加操作,或者重载 << 运算符来支持自定义对象的输出。

本题详细解读

1. 运算符重载的基本概念

运算符重载是通过定义一个特殊的成员函数或全局函数来实现的。这个函数的名称由 operator 关键字后跟要重载的运算符符号组成。例如,重载 + 运算符的函数名为 operator+

2. 运算符重载的语法

运算符重载可以通过成员函数或全局函数来实现。以下是两种方式的语法示例:

成员函数形式

-- -------------------- ---- -------
----- ------- -
-------
    ------- --------------- -------- ------ -
        -- ------
        ------- -------
        -- --------------- - ----------- - ------------
        ------ -------
    -
--

全局函数形式

3. 可重载的运算符

C++ 中大部分运算符都可以重载,但有一些运算符不能重载,例如:

  • .(成员访问运算符)
  • .*(成员指针访问运算符)
  • ::(作用域解析运算符)
  • ?:(三元条件运算符)

4. 运算符重载的注意事项

  • 运算符重载不能改变运算符的优先级和结合性。
  • 运算符重载不能改变运算符的操作数个数。例如,+ 运算符始终是二元运算符。
  • 重载的运算符应保持语义一致性。例如,重载 + 运算符时,通常应实现加法操作,而不是其他不相关的操作。

5. 示例代码

以下是一个完整的示例,展示如何重载 + 运算符和 << 运算符:

-- -------------------- ---- -------
-------- ----------

----- ------- -
-------
    --- ------

    ----------- - - -- - -------- --

    -- -- - -----------
    ------- --------------- -------- ------ -
        ------ ------------------- - -------------
    -

    -- -- -- -----------
    ------ ------------- ------------------------ --- ----- -------- -----
--

-- -- -- ------
------------- ------------------------ --- ----- -------- ---- -
    -- -- ----------
    ------ ---
-

--- ------ -
    ------- ------
    ------- ------
    ------- - - - - -- -- ----- - ---
    --------- -- -------- - -- - -- ---------- -- ----- -- ---
    ------ --
-

在这个示例中,+ 运算符被重载以实现两个 MyClass 对象的相加操作,<< 运算符被重载以支持 MyClass 对象的输出。

纠错
反馈