C++
运算符重载:
(1)不能改变运算符的优先级;
(2)不能改变运算符的结合型;
(3)
默认参数不能和重载的运算符一起使用;
(4)不能改变运算符的
操作数的个数;
(5)不能创建新的运算符,只有已有运算符可以被重载;
(6)运算符作用于C++内部提供的数据类型时,原来含义保持不变。
C++ 运算符除了以下几个运算符,其余都能被重载
- 成员选择 "."
- 指向成员操作的指针 ".*"
- 作用域 "::"
- "sizeof"
- 三目运算符 "?:"
运算符重载有两种形式,分为重载为类的成员函数和类的友元函数,重载为友元函数时没有this指针,所以必须带参数,否则将出现编译错误。
运算符重载为类的成员函数的语法为:
函数类型 operator 运算符(形参表)
{
函数体;
}
运算符重载为类的友元函数的语法为:
friend 函数类型 operator 运算符(形参表)
{
函数体;
}
= -> () [] delete new 只能重载为类的成员函数
//运算符重载实例 #include <iostream> using namespace std; class A { public: A(){ real = imag = 0;} A(double r, double i) { real = r; imag = i; } A operator + (const A &c);//重载为类的成员函数 friend void print(const A &c); //友元函数 private: double real; double imag; }; inline A A::A + (const A &c) //定义为内联函数,代码复制,运算效率高 { return complex(real + c.real, imag + c.imag); } void print(const A &c) { if(c.imag < 0) cout<<c.real<<c.imag<<'i'<<endl; else cout<<c.real<<'+'<<c.imag<<'i'<<endl; } int main() { A c1(2.0, 3.5), c2(6.7, 9.8), c3; c3 = c1 + c2; cout<<"c1 + c2 = "; print(c3); //友元函数不是成员函数,只能采用普通函数调用方式,不能通过类的对象调用 return 0; }