• c++学习记录(十)


    友元

    友元分为友元函数和友元类两种

    - 友元函数

    • 一个类的友元函数可以访问该类的私有成员
    • 注意:友元函数不是这个类的成员函数
    • 格式
      1.声明全局函数为友元函数
      friend 返回值类型 函数名(参数);
      2.声明其他类的成员函数为友元函数
      friend 返回值类型 类名::函数名(参数);
    • 可以把一个类的成员函数(包括构造、析构函数)说明为另一个类的友元

    - 友元类

    • 如果A是B的友元类,那么A的成员函数可以访问B的私有成员
    class CCar
    {
        private:
            int price;
            friend class CDrive;//声明CDriver为友元类
    };
    class CDriver
    {
        public:
            CCar myCar;
        void ModifyCar(){//改装汽车
            myCar.price+=1000;//因CDriver是CCar的友元类,故此处可以访问其私有成员
    };
    int main(){return 0;}
    
    • 友元类之间的关系不能传递,不能传承

    运算符重载

    - 基本概念

    • 将运算符的功能扩展,使之还可以用于对象间的运算
    • 运算符重载,就是对已有的运算符(c++中预定义的运算符)赋予多重的含义,使同一运算符作用于不同类型的数据时,有不同类型的行为
    • 运算符重载的目的是:拓展c++中提供的运算符的适用范围
    • 同一个运算符,对不同类型的操作数,所发生的行为不同
      • complex_a+complex_b生成新的复数对象
      • 5+4=9

    - 运算符重载的形式

    • 运算符重载的实质是函数重载
    • 可以重载为普通函数,也可以重载为成员函数
    • 把含运算符的表达式转换成对运算符函数的调用
    • 把运算符的操作数转换成运算符的函数参数
    • 运算符可以被多次重载,在被多次重载时,根据实参的类型决定调用哪个运算符函数
    • 格式
    返回值类型 operator 运算符(形参表)
    {
        ...
    }
    
    • 示例
    class Complex
    {
        public:
            double real,imag;
            Complex (double r=0.0,doublei=0.0):real(r),imag(i){}
            Complex operator - (const Complex & c);
    };
    Complex operator + (const Complex & a,const Complex & b)
    {
        return Complex(a.real+b.real,a.imag+b.imag);//返回一个临时对象
    }
    Complex Complex::operator - (const Complex & c)
    {
        return Complex(real-c.real,imag-c.imag);//返回一个临时对象
    }
    int main()
    {
        Complex a(4,4),b(1,1),c;
        c=a+b;//等价于c=operator + (a,b)
        cout<<c.real<<","<<c.imag<<endl;
        cout<<(a-b).real<<","<<(a-b).imag<<endl;//a-b等价于a.operator - (b)
        return 0;
    }
    
    • 输出
    5,5
    3,3
    
    • 重载为成员函数时,参数个数为运算符目数减一
    • 重载为普通函数时,参数个数为运算符目数
  • 相关阅读:
    面向对象
    用JS添加和删除class类名
    偶然
    js-cookie的用法
    eleemnt-ui修改主题颜色
    router.go,router.push,router.replace的区别
    vue生产环境清除console.log
    特别关心
    echart
    20182330魏冰妍_预备作业
  • 原文地址:https://www.cnblogs.com/2002ljy/p/12271039.html
Copyright © 2020-2023  润新知