📜  C / C++中的点(。)运算符

📅  最后修改于: 2021-05-25 23:49:28             🧑  作者: Mango

点(。)运算符用于通过对象名称直接选择成员。换句话说,它用于访问子对象。

句法:

object.member;

例如:

#include 
  
struct Point {
    int x, y;
};
  
int main()
{
    struct Point p1 = { 0, 1 };
  
    // Accessing members of point p1
    // using the dot operator
    p1.x = 20;
  
    printf("x = %d, y = %d", p1.x, p1.y);
  
    return 0;
}
输出:
x = 20, y = 1

点(。)实际上是运算符吗?

是的,点(。)实际上是C / C++中的运算符,用于通过对象名称直接选择成员。在方括号之后,它在操作员优先级和关联性图表中具有最高的优先级。

还有其他运算符,例如dot(。)运算符吗?

是的。还有另一个这样的运算符(->)。它被称为“间接成员选择”运算符,其优先级仅次于点(。)运算符。它用于在指针的帮助下间接访问成员。

例子:

void addXtoList(struct Node* node, int x)
{
    while (node != NULL) {
        node->data = node->data + x;
        node = node->next;
    }
}

点(。)运算符可以重载吗?

不,点(。)运算符不能重载。这样做会导致错误。

例子:

// C++ program to illustrate
// Overloading this .(dot) operator
  
#include 
using namespace std;
  
class cantover {
public:
    void fun();
};
  
// assume that you can overload . operator
// Class X below overloads the . operator
class X {
  
    cantover* p;
  
    // Overloading the . operator
    cantover& operator.()
    {
        return *p;
    }
  
    void fun();
};
  
void g(X& x)
{
  
    // Now trying to access the fun() method
    // using the . operator
    // But this will throw an error
    // as we have overloaded the . operator above
    // Hence compiler won't allow doing so
    x.fun();
}

输出:

prog.cpp:11:20: error: expected type-specifier before '.' token
  cantover& operator.() 
                    ^
prog.cpp:11:12: error: expected ';' at end of member declaration
  cantover& operator.() 
            ^
prog.cpp:11:20: error: expected unqualified-id before '.' token
  cantover& operator.() 
                    ^
prog.cpp: In function 'void g(X&)':
prog.cpp:15:7: error: 'void X::fun()' is private
  void fun(); 
       ^
prog.cpp:19:8: error: within this context
  x.fun(); // X::fun or cantover::fun or error? 
        ^
要从最佳影片策划和实践问题去学习,检查了C++基础课程为基础,以先进的C++和C++ STL课程基础加上STL。要完成从学习语言到DS Algo等的更多准备工作,请参阅“完整面试准备课程”