zoukankan      html  css  js  c++  java
  • 03友元、运算符重载’

    锻炼类内声明,类外实现的写法---使用作用域符号::

    1)友元--friend--让一个函数或类访问另一个类中私有成员

        1)全局函数做友元

          在类中用friend声明全局函数是友元即可

        2)类做友元

          在类中用friend声明类是友元即可

        3)类中成员函数做友元

          在类中用friend声明类中成员函数是友元即可

    2)运算符重载--对已有的运算符重新进行定义,赋予其另一种功能,以适用不同的自定义数据类型---operator运算符

        1)加号+运算符重载--实现自定义数据类型相加运算

            成员函数--本质:类名 p3 = p1.operator+(p2)

            全局函数重载--本质:类名 p3 = operator+(p1,p2)

            运算符重载也可以发生函数重载

            内置数据类型不能改变运算方式

        2)左移<<运算符重载

            1)不会利用成员函数来重载<<运算符---因为无法实现cout在左侧

            2)只能利用全局函数来重载<<运算符

                -----cout输出流(ostream)对象--返回为输出流对象的引用(链式编程)

                -----

                  ostream& operator<< (ostream &cout, Person &p)

                {

                  cout << " m_A = " << p.m_A << "m_B" <<p.m_B;

                  return cout;

                } 

        3)递增++运算符重载

            1)前置++重载

              返回引用--可以链式编程

            2)后置++重载

              返回值

        4)赋值=运算符重载

     //重载 赋值运算符
        Person & operator=(Person &p)
        {
            //编译器提供的浅拷贝
            //m_Age = p.m_Age;
            //应先判断是否有属性在堆区,若有先释放干净,然后再深拷贝
            //1)释放内存
            if (m_Age != NULL)
            {
                delete m_Age;
                m_Age = NULL;
            }
            //2)深拷贝---重新申请一块内存空间
            m_Age = new int(*p.m_Age);
            //返回对象的本身---链式编程思想
            return *this;
        }

        5)关系==运算符重载

     //重载 ==
        bool operator==(Person& p)
        {
            if (this->m_Age == p.m_Age && this->m_Name == p.m_Name)
            {
                return true;
            }
            return false;

        }

        6)函数调用运算符重载 ----SPL中用的比较多---就是重载小括号()

            //由于使用起来很像函数调用,因此称为仿函数

            //仿函数非常灵活,没有固定的写法

    class Myprint
    {
    public:
        //重载函数调用运算符
        void operator()(string test)
        {
            cout << test << endl;
        }
    };


    void test3()
    {
        Myprint myprint;
        myprint("hello world");//由于使用起来很像函数调用,因此称为仿函数
    }

            //回顾匿名函数对象--类型+()==匿名对象(即没有名的对象---当前行执行完之后立马被释放)

  • 相关阅读:
    repadmin example.
    在 Windows 2000 和 Windows XP 中重置计算机帐户
    管理活动目录
    使用AdsiEdit工具查看GC数据
    mms链接media player 9.0无法打开
    活动目录的复制之细节
    使用Repadmin.exe 对活动目录复制排错
    Difference among Domain Local Group and Global Group and Universal Group
    使用 ADSI Edit 编辑 Active Directory 属性
    xp的密码工具
  • 原文地址:https://www.cnblogs.com/MissZhang-154/p/13216401.html
Copyright © 2011-2022 走看看