C++基础面试题 | 什么是C++中的运算符重载?

koi li 2024-10-25 17:05:02 阅读 82

在这里插入图片描述

文章目录

回答重点:示例:

运算符重载的基本规则和注意事项:

回答重点:

C++的运算符重载是指可以为自定义类型(如类或结构体)定义运算符的行为,使其像内置类型一样使用运算符。通过重载运算符,开发者可以对类对象使用常见的运算符(如<code>+, -, *, ==, []等),并为它们赋予特定的操作逻辑。

重载的运算符仍然遵守其原有的优先级和结合性。重载必须是通过类成员函数或友元函数实现。不能重载的运算符::.*.:sizeoftypeidconst_cast等。

示例:

class Complex {

public:

int real, imag;

Complex(int r = 0, int i = 0) : real(r), imag(i) { }

// 重载 + 运算符

Complex operator + (const Complex &obj) {

return Complex(real + obj.real, imag + obj.imag);

}

};

重载+后,以下代码就可以正常工作:

Complex a(1.0, 2.0);

Complex b(3.0, 4.0);

Complex c = a + b; // 使用重载的+运算符

运算符重载的基本规则和注意事项:

只能重载已有的运算符,不能创建新的运算符。

比如 + 运算符可以重载,但不能创建一个新的运算符。

不能改变运算符的优先级、结合性和内在语义。

重载只改变运算符的操作对象和行为,但在表达式中的优先级和结合性是固定的,也不能改变其在基本类型上的预期行为。例如,不能让 + 运算符变成减法。

有些运算符不能被重载。

比如 .(成员访问运算符)、?:(三元条件运算符)等不能被重载。但是大多数运算符符合相应的规定都可以重载。

运算符重载可以作为成员函数或全局函数。

作为成员函数时,第一个参数隐含为 this 指针。如果需要对两个不同类型的对象进行操作,通常会使用全局函数形式重载,同时全局函数形式需要使用友元声明访问类的私有成员。

class Complex {

public:

Complex(double r = 0.0, double i = 0.0) : real(r), imag(i) { }

// 声明为友元函数,使其访问私有成员

friend Complex operator+ (const Complex& lhs, const Complex& rhs);

private:

double real;

double imag;

};

// 作为全局函数重载 + 运算符

Complex operator+ (const Complex& lhs, const Complex& rhs) {

return Complex(lhs.real + rhs.real, lhs.imag + rhs.imag);

}

运算符重载要确保符合逻辑和直观,以免造成困惑。例如,== 运算符通常用于比较对象是否相等,那么它的返回值应该是一个布尔值。



声明

本文内容仅代表作者观点,或转载于其他网站,本站不以此文作为商业用途
如有涉及侵权,请联系本站进行删除
转载本站原创文章,请注明来源及作者。