c++不能重载的操作符
时间: 2024-03-04 12:48:27 浏览: 20
在 C++ 中,有一些操作符是不能被重载的,例如:
1. `.`:成员选择操作符。
2. `.*`:成员指针选择操作符。
3. `::`:作用域解析操作符。
4. `?:`:条件运算符。
5. `sizeof`:求大小运算符。
6. `typeid`:类型识别运算符。
这些操作符的含义已经在 C++ 中定义好了,不能被重载改变。
相关问题
c++ 能重载的操作符有那些
C++中可以重载的操作符有以下一些:
- 算术运算符:+、-、*、/、%
- 关系运算符:==、!=、>、<、>=、<=
- 逻辑运算符:&&、||、!
- 位运算符:&、|、^、~、<<、>>
- 赋值运算符:=、+=、-=、*=、/=、%=、&=、|=、^=、<<=、>>=
- 下标运算符:[]
- 前缀和后缀运算符:++、--
- 函数调用运算符:()
- 逗号运算符:,
- 三目运算符:? :
- 新增的 C++11 运算符:new、new[]、delete、delete[]
注意: 不能重载的操作符包括: .,.*,::,?:,sizeof,typeid,alignof,noexcept,const_cast,dynamic_cast,reinterpret_cast,static_cast
讲解一下C++自定义类重载操作符
在C++中,可以通过重载运算符来实现自定义类的行为。C语言中也可以使用这种方法,但需要借助函数指针。在C语言中,运算符被定义为函数,可以使用函数指针来实现运算符重载。
以重载"+"运算符为例,假设我们有一个自定义的复数类Complex,可以定义一个名为Complex_add的函数,用于实现复数相加的运算:
```
typedef struct {
double real;
double imag;
} Complex;
Complex Complex_add(Complex a, Complex b) {
Complex c;
c.real = a.real + b.real;
c.imag = a.imag + b.imag;
return c;
}
```
然后,我们可以定义一个名为operator+的函数,用于重载"+"运算符:
```
Complex operator+(Complex a, Complex b) {
return Complex_add(a, b);
}
```
这里的operator+函数返回一个Complex类型的值,实现了"+"运算符的功能。我们可以通过以下方式使用此运算符:
```
Complex a = {1.0, 2.0};
Complex b = {3.0, 4.0};
Complex c = a + b;
```
这样,c的值将为{4.0, 6.0},即a和b的复数相加的结果。
同样的方法,也可以重载其他运算符,例如"-"、"*"、"/"等等。需要注意的是,不是所有运算符都可以重载,例如"."和"sizeof"等运算符无法重载。