C++ 运算符重载

来源:互联网 发布:贝利撒留 知乎 编辑:程序博客网 时间:2024/06/13 16:53

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;}


0 0
原创粉丝点击