在C++中,有一些运算符是不能重载的,它们分别是:.(点)、::(作用域解析符)、?:(条件运算符)、sizeof(大小)、.*(指针间接访问)和typeid(类型信息)。这些运算符不能重载的原因是它们与C++的语法有关,而不是算数运算符,重载它们可能会影响编译器的行为。
点运算符
点运算符用于访问类成员,它是一种特殊的访问运算符,不能被重载。它的左操作数是一个类的对象,右操作数是类成员的名称,它可以访问类的数据成员和函数成员。
class A
{
public:
int x;
void show()
{
cout << x << endl;
}
};
int main()
{
A a;
a.x = 10; // 访问数据成员
a.show(); // 访问函数成员
return 0;
}
作用域解析运算符
作用域解析运算符用于访问类的静态成员,它可以访问类的静态数据成员和静态函数成员。它的左操作数是类的名称,右操作数是静态成员的名称,它也不能重载。
class A
{
public:
static int x;
static void show()
{
cout << x << endl;
}
};
int A::x = 10; // 定义静态数据成员
int main()
{
A::show(); // 访问静态函数成员
cout << A::x << endl; // 访问静态数据成员
return 0;
}
条件运算符
条件运算符用于条件表达式,它的左操作数是一个条件表达式,右操作数是两个表达式,它会根据条件表达式的值来选择返回哪个表达式的值,它也不能重载。
int main()
{
int a = 10;
int b = 20;
int c = a > b ? a : b; // 条件运算符
cout << c << endl;
return 0;
}
大小运算符
大小运算符用于获取变量的大小,它的操作数可以是变量名称、表达式、类型名称或者类类型的对象,它会返回一个无符号整数,它也不能重载。
int main()
{
int a = 10;
cout << sizeof(a) << endl; // 获取变量的大小
return 0;
}
指针间接访问运算符
指针间接访问运算符用于访问指针指向的内存空间,它的左操作数是一个指针,右操作数是一个变量名称,它会返回指针指向的内存空间,它也不能重载。
int main()
{
int a = 10;
int *p = &a;
cout << *p << endl; // 指针间接访问运算符
return 0;
}
类型信息运算符
类型信息运算符用于获取变量的类型信息,它的操作数可以是变量名称、表达式、类型名称或者类类型的对象,它会返回一个type_info类型的对象,它也不能重载。
int main()
{
int a = 10;
cout << typeid(a).name() << endl; // 类型信息运算符
return 0;
}
在C++中,有一些运算符是不能重载的,它们分别是:.(点)、::(作用域解析符)、?:(条件运算符)、sizeof(大小)、.*(指针间接访问)