C++ 中的运算符
本文将演示如何在 C++ 中使用运算符的多种方法。
C++ 语言提供的常用运算符
运算符是 C++ 编程中表达式的重要组成部分。它们提供对提供的操作数进行的不同操作,评估结果通常由程序员根据需要使用。我们可以将操作数粗略地分为两种类型:普通运算符和特殊运算符。通用运算符几乎是大多数编程语言中普遍实现的操作,其中包括算术、逻辑、比较、赋值、成员访问运算符等。
与代数中的规则类似,当多个运算符组成表达式时,存在优先级和结合性特征。我们将在本文中总结其中的一些规则,但完整的描述应参考语言文档和运算符优先级表。请注意,基本算术运算的优先级和结合性规则类似于常见的数学规则。因此,以下示例中的表达式输出整数 20
和 10
,而不是 60
和 30
。
#include <iostream>
using std::cout; using std::endl;
int main()
{
cout << 10 + 2 * 5 << endl;
cout << 40 - 20 - 10 << endl;
return EXIT_SUCCESS;
}
输出:
20
10
程序员可以使用括号来覆盖优先级和结合性的一般规则,就像在代数中所做的那样。每个带括号的复合表达式将被视为一个单独计算的单元。使用指针算法时的常见错误之一是遗漏括号。
如果我们使用指针算术加解引用操作访问数组中的元素,我们需要将算术一放在括号中。否则,给定指针指向的值将增加操作数而不是指针本身,因为解引用运算符的优先级高于加法。
#include <iostream>
using std::cout; using std::endl;
int main()
{
int vec[] = {10, 22, 63, 14};
cout << *vec + 2 << endl;
cout << *(vec + 2) << endl;
return EXIT_SUCCESS;
}
输出:
12
63
C++ 中的重载操作
在 C++ 语言中可以遇到的最强大的功能之一是,它允许程序员定义在用户定义的对象(如类)上调用运算符时应如何操作。由于此功能为给定运算符提供替代操作,因此称为重载运算符。但是,请注意,无法通过实现重载运算符来修改操作数的数量和优先级。
以下代码片段声明了一个 Person
类,该类包含两个字符串数据成员,并为此类型重载了 +
运算符。重载运算符的实现类似于具有特殊名称的其他类函数,以 operator
关键字开头,后跟运算符符号本身。这些函数可以有返回类型和参数列表。请注意,运算符重载的限制之一是程序员不能创建像 $>
或 !!
这样的新运算符。
#include <iostream>
#include <string>
#include <utility>
#include <vector>
using std::cout; using std::endl;
using std::vector; using std::string;
class Person {
public:
Person(string s1, string s2):
name(std::move(s1)), surname(std::move(s2)) {}
Person operator+(const Person &p){
Person ret(name + p.name, surname + p.surname);
return ret;
}
void printPerson() {
cout << name << " " << surname << endl;
}
private:
string name;
string surname;
};
int main() {
Person P1("Buddy", "Rich");
Person P2("Lady", "Bee");
P1 = P1 + P2;
P1.printPerson();
exit(EXIT_SUCCESS);
}
输出:
BuddyLady RichBee
相关文章
Arduino 复位
发布时间:2024/03/13 浏览次数:315 分类:C++
-
可以通过使用复位按钮,Softwarereset 库和 Adafruit SleepyDog 库来复位 Arduino。
Arduino 的字符转换为整型
发布时间:2024/03/13 浏览次数:181 分类:C++
-
可以使用简单的方法 toInt()函数和 Serial.parseInt()函数将 char 转换为 int。
Arduino 串口打印多个变量
发布时间:2024/03/13 浏览次数:381 分类:C++
-
可以使用 Serial.print()和 Serial.println()函数在串口监视器上显示变量值。