迹忆客 专注技术分享

当前位置:主页 > 学无止境 > 编程语言 > C++ >

C++ 中的箭头运算符与点运算符

作者:迹忆客 最近更新:2023/08/25 浏览次数:

要访问 C++ 中的类成员,我们使用点运算符和箭头运算符。 但这并不意味着它们是相同的。

这两个运算符之间存在一些差异,我们将在本文中讨论。 在本文中,类、联合和结构类型都被视为类类型。

要了解点运算符与箭头运算符的不同之处,让我们首先了解这两个运算符的基础知识。


C++ 中的点 (.) 运算符

C++ 中的点 (.) 运算符也称为类成员访问运算符,有助于访问任何给定类的公共成员。 在这里,公共成员只不过是类的变量和方法。

句法:

name_of_object.name_of_member;

让我们看一个例子,看看点运算符是如何工作的。

在以下示例中,desserts 类具有一个私有数据成员 cakes、两个公共成员函数 init() 和 display() 以及一个公共数据成员 Chocolates。

现在,我们可以使用点运算符来访问某些变量和函数并向变量赋值。 请注意,在 main() 函数内部,我们在以下位置使用点运算符:

  1. 要通过公共成员函数 init() 将值 100 分配给私有数据成员。
  2. 将值 200 分配给公共数据成员 Chocolates。
  3. 要访问公共成员函数,display()。

示例代码:

#include <iostream>
using namespace std;

class desserts
{
    private:
        int cakes;
    public:
        int chocolates;
        void init(int cakes)
        {this->cakes = cakes;}
        void display()
        {cout<<"Number of cakes: "<<cakes<<endl;}
};

int main()
{
    //object declaration
    desserts q;
    //assign the values
    q.init(100);
    q.chocolates=200;

    //print the values
    q.display();
    cout<<"Number of chocolates: "<<q.chocolates<<endl;

    return 0;
}

输出:

Number of cakes: 100
Number of chocolates: 200

这就是我们在 C++ 中使用点运算符的方式。 现在,让我们看看箭头运算符是如何工作的。


C++ 中的箭头 (->) 运算符

要访问结构体或联合体的元素,我们在 C++ 中使用箭头运算符 (->)。 箭头运算符使用指向结构或联合的指针变量。

句法:

(name_of_pointer)->(name_of_variable)

让我们看一个例子,看看箭头运算符是如何工作的。 请记住,它既适用于结构,也适用于联合。

在此示例中,我们在结构中使用箭头运算符。 这里,结构甜点有两个成员,风味和数量。

该结构有一个称为 items 的对象。 然后,在主块内,我们使用箭头运算符将值 2 分配给变量 number。

此外,我们使用箭头运算符来访问和打印变量数值。 这本质上就是箭头运算符处理结构的方式。

示例代码:

#include <iostream>
using namespace std;

struct desserts{
    char flavor[50];
    int number;
};

// Create the object of the structure
struct desserts* item = NULL;

int main()
{

    item = (struct desserts*)
        malloc(sizeof(struct desserts));

    //use arrow operator to assign value
    item->number = 2;

    cout <<"The number of items: "<< item->number;

    return 0;
}

输出:

The number of items: 2

让我们看另一个在联合中使用箭头运算符的示例。 在这里,联合甜品有两个成员,口味和数量。

该联合有一个名为 items 的对象。 然后,在主块内,我们使用箭头运算符为变量 number 赋值。

此外,我们使用箭头运算符来访问和打印变量数值。 请注意,联合中的箭头运算符的工作方式与结构中的相同。

示例代码:

#include <iostream>
using namespace std;

// union
union desserts {
    char flavor[50];
    int number;
};

union desserts* item = NULL;

int main()
{

    item = (union desserts*)
        malloc(sizeof(union desserts));

    item->number = 5;
    cout <<"The number of items:"<< item->number;
}

输出:

The number of items: 5

C++ 中的箭头运算符与点运算符

现在我们已经介绍了 C++ 中点和箭头运算符的基础知识,是时候更深入地了解它们并了解它们的差异了。 以下是您需要了解的点运算符和箭头运算符之间的所有差异的列表:

点 (.) 运算符直接访问类的元素,而箭头 (->) 运算符则使用指针来执行此操作。 这是直接访问元素的样子:

object_name.element

另一方面,要使用指针访问元素,我们这样做:

ypointer->element

这意味着点 (.) 运算符用于对象,而箭头运算符用于指向对象的指针。 让我们举个例子来更好地理解这一点。

假设我们有一个对象 Demo,我们想调用它的方法之一 test()。 为此,我们将使用点 (.) 运算符,如下所示:

Demo.test()

如果我们改用箭头运算符,则意思就不一样了。 这里,下面的代码将调用指针 Demo 所指向的对象上的 test() 方法,而不是对对象 Demo 进行调用。

这是因为箭头运算符首先取消引用指针,以便我们可以转到它所指向的对象。

Demo->test

我们不能将点 (.) 运算符应用于指针,这与箭头 (->) 运算符不同。 请注意,(*p).element 相当于 p->element

使用 (*p).element 内的括号是因为点 (.) 运算符的优先级高于 *。 因此,为了首先评估 *,我们使用括号。

然而,简化这一过程的最佳方法是将整个部分 - (*p) 替换为像 p-> 这样的指针,这样就不会混淆优先级。

在 C++ 中,我们不能重载点 (.) 运算符,但可以重载箭头 (->) 运算符。 要了解有关 C++ 中运算符重载的更多信息,请参阅此文档。

这就是关于点和箭头运算符的不同之处。


总结

在本文中,我们讨论了点运算符和箭头运算符的基础知识,并了解了它们的不同之处。 我们看到了箭头运算符如何成为括号和点运算符的扩展,以及它如何影响这两者的工作方式。

转载请发邮件至 1244347461@qq.com 进行申请,经作者同意之后,转载请以链接形式注明出处

本文地址:

相关文章

Arduino 中停止循环

发布时间:2024/03/13 浏览次数:444 分类:C++

可以使用 exit(0),无限循环和 Sleep_n0m1 库在 Arduino 中停止循环。

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()函数在串口监视器上显示变量值。

Arduino if 语句

发布时间:2024/03/13 浏览次数:123 分类:C++

可以使用 if 语句检查 Arduino 中的不同条件。

Arduino ICSP

发布时间:2024/03/13 浏览次数:214 分类:C++

ICSP 引脚用于两个 Arduino 之间的通信以及对 Arduino 引导加载程序进行编程。

使用 C++ 编程 Arduino

发布时间:2024/03/13 浏览次数:127 分类:C++

本教程将讨论使用 Arduino IDE 在 C++ 中对 Arduino 进行编程。

Arduino 中的子程序

发布时间:2024/03/13 浏览次数:168 分类:C++

可以通过在 Arduino 中声明函数来处理子程序。

扫一扫阅读全部技术教程

社交账号
  • https://www.github.com/onmpw
  • qq:1244347461

最新推荐

教程更新

热门标签

扫码一下
查看教程更方便