C++ Operator 重载示例

什么是 Operator 是否超载?

运用 操作符重载 in C++,可以在一个作用域内为一个运算符指定多个含义。运算符重载的目的是为用户定义的数据类型提供运算符的特殊含义。

借助运算符重载,你可以重新定义大多数 C++ 运算符。您还可以使用运算符重载,从而使用一个运算符执行不同的运算。

句法

要超载 C++ 运算符,您应该在类内部定义一个特殊的函数,如下所示:

class class_name
{
    ... .. ...
    public
       return_type operator symbol (argument(s))
       {
           ... .. ...
       } 
    ... .. ...
};

以下是对上述语法的解释:

  • return_type 是函数的返回类型。
  • 接下来,提到运算符关键字。
  • 符号表示要重载的运算符号。例如,+、-、<、++。
  • 参数可以按照与函数相同的方式传递给运算符函数。

例子1

#include <iostream>
using namespace std;
class TestClass {
private:
	int count;
public:
	TestClass() : count(5) {}
	void operator --() {
		count = count - 3;
	}
	void Display() { 

		cout << "Count: " << count; }
};

int main() {
	TestClass tc;
	--tc;
	tc.Display();
	return 0;
}

输出:

Operator 过载

以下是代码截图:

Operator 过载

代码说明:

  1. 在我们的代码中包含 iostream 头文件以使用其功能。
  2. 在我们的程序中包含 std 命名空间,以便使用它的类而不调用它。
  3. 创建一个名为 TestClass 的类。
  4. 使用私有访问修饰符,将类成员标记为私有可访问。
  5. 创建一个整数变量 count。此变量将是私有可访问的。
  6. 使用公共访问修饰符,将类成员标记为私有可访问。
  7. 使用类构造函数将变量计数器初始化为 5。
  8. 重载—运算符的含义。
  9. 该运算符将变量 x 的值减 1。
  10. 运算符重载部分结束。运算符已被赋予新名称。
  11. 定义一个名为Display()函数。
  12. 调用 Display() 函数时,在控制台上打印变量 count 的值以及其他文本。 } 标记 Display() 函数体的结尾。
  13. 课堂主体结束。
  14. 调用main()函数。程序逻辑应该添加到此函数中。
  15. 创建 TestClass 类的一个实例并将其命名为 tc。
  16. 这将调用 void operator-() 函数。
  17. 使用TestClass类的立场调用Display()函数。
  18. 该函数成功完成后必须返回值。
  19. 函数 main() 主体结束。

不同的方法 Operator 重载 C++

您可以通过实现以下任何类型的函数来执行运算符重载:

  1. 成员函数
  2. 非成员函数
  3. 友元函数
  • 当左操作数是类的对象时,运算符重载函数可能是成员函数。
  • 当左操作数不同时, Operator重载函数应该是非成员函数。

如果需要访问私有和受保护的类成员,您可以使运算符重载函数成为友元函数。

都可以 C++ Opera器是否超载?

没有。有 C++ 不可重载的运算符。

这些措施包括:

  • ::-范围解析运算符
  • ?:-三元运算符。
  • . -成员选择器
  • Sizeof 运算符
  • * -成员指针选择器

要记住的事情

  1. 使用运算符重载,您可以重新定义运算符的工作方式,但仅限于用户定义类型(对象、结构)。您不能将其用于内置类型(float、char、int 等)。
  2. = 和 & C++ 运算符默认是重载的。例如,你可以直接使用=运算符复制同一个Class的对象。
  3. Opera运算符的优先级不会改变其结合性和优先级。但是,您可以使用括号来改变求值的顺序。
  4. 有四个运算符不能重载 C++。它们包括范围解析运算符(::)、成员选择运算符(.)、通过指向函数的指针进行成员选择运算符(.*)和三元运算符(?:)。

规则 Operator 过载

以下是规则 Operator 重载:

  • 为了使其工作,至少一个操作数必须是用户定义的类对象。
  • 您只能重载现有的运算符。您不能重载新的运算符。
  • 有些运算符不能通过友元函数重载。但是,这些运算符可以通过成员函数重载。

如何超载 Opera器

例子1

#include <iostream>   
using namespace std;
class OperatorOverload {
private:
	int x;

public:
	OperatorOverload() : x(10) {}
	void operator ++() {
		x = x + 2;
	}
	void Print() {
		cout << "The Count is: " << x;
		}
};
int main() {
	OperatorOverload ov;
	++ov;   
	ov.Print();
	return 0;
}

输出:

超载 Operator 示例

以下是代码截图:

超载 Operator 示例

代码说明:

  1. 在我们的代码中包含 iostream 头文件以使用其功能。
  2. 在我们的程序中包含 std 命名空间,以便使用它的类而不调用它。
  3. 创建一个名为 OperatorOverload。
  4. 使用私有访问修饰符,将类成员标记为私有可访问。
  5. 创建一个整数变量 x。此变量将是私有访问的。
  6. 使用公共访问修饰符,将类成员标记为私有可访问。
  7. 使用类构造函数将变量 x 初始化为 10。
  8. 重载++运算符的含义。
  9. 该运算符将变量 x 的值增加 2。
  10. 运算符重载部分结束。运算符已被赋予新名称。
  11. 调用 Print() 函数。
  12. 当调用 Print() 函数时,在控制台上打印变量 x 的值以及其他文本。
  13. Print() 函数体结束。
  14. 课堂主体结束。
  15. 调用main()函数。程序逻辑应该添加到此函数中。
  16. 创建一个实例 OperatorOverload 类名为 ov。
  17. 这将调用 void operator ++() 函数。
  18. 使用立场 OperatorOverload 类来调用 Print() 函数。
  19. 该函数成功完成后必须返回值。
  20. 函数 main() 主体结束。

例子2

#include<iostream> 
using namespace std;

class TestClass {
private:
	int real, over;
public:
	TestClass(int rl = 0, int ov = 0) {
		real = rl;
		over = ov;
	}

	TestClass operator + (TestClass const &obj) {
		TestClass result;
		result.real = real + obj.real;
		result.over = over + obj.over;
		return result;
	}
	void print() {
		cout << real << " + i" << over << endl;
	}
};
int main()
{
	TestClass c1(9, 5), c2(4, 3);
	TestClass c3 = c1 + c2;
	c3.print();
}

输出:

超载 Operator 示例

以下是代码截图:

超载 Operator 示例

代码说明:

  1. 将iostream头文件包含到我们的程序中才能使用它的功能。
  2. 将 std 命名空间包含到我们的程序中,以便在不调用它的情况下使用它的类。
  3. 创建一个名为 TestClass 的类。{ 标记类主体的开始。
  4. 使用 private 访问修饰符将变量标记为私有,这意味着它们只能从类内部访问。
  5. 定义两个整数变量,real 和 over。
  6. 使用公共访问修饰符将构造函数标记为公共,这意味着它甚至可以在类之外访问。
  7. 创建类构造函数并初始化 变量.
  8. 初始化变量real的值。
  9. 初始化变量的值。
  10. 构造函数主体结束。
  11. 覆盖 + 运算符的含义。
  12. 创建TestClass类型的数据类型结果。
  13. 对复数使用 + 运算符。此行将一个数的实部添加到另一个数的实部。
  14. 对复数使用 + 运算符。此行将一个数的虚部添加到另一个数的虚部。
  15. 程序执行成功后将返回变量result的值。
  16. 结束定义+运算符的新含义,即重载。
  17. 调用 print() 方法。
  18. 在控制台上打印加法后的新复数。
  19. print() 函数体结束。
  20. TestClass 类主体结束。
  21. 调用 main() 函数。
  22. 传递要相加的实部和复部的值。c1 的第一部分将添加到 c2 的第一部分,即 9+4。c1 的第二部分将添加到 c 的第二部分,即 5+3。
  23. 使用重载 + 运算符执行运算并将结果存储在变量 c3 中。
  24. 在控制台上打印变量 c3 的值。
  25. main() 函数体结束。

总结

  • 您可以为 C++ 操作者 在一个范围内。
  • 这称为运算符重载。
  • Operator重载为用户定义的数据类型提供了运算符的特殊含义。
  • 你可以重新定义大多数 C++ 通过运算符重载来实现运算符。
  • 不是所有的 C++ 运算符可以重载。
  • 对于要重载的运算符,至少一个操作数必须是用户定义的对象。
  • 仅可重载现有运算符。您无法重载新的运算符。