点(。)运算符用于通过对象名称直接选择成员。换句话说,它用于访问子对象。
句法:
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等的更多准备工作,请参阅“完整面试准备课程” 。