• C++ Primer笔记12_运算符重载_递增递减运算符_成员訪问运算符


    1.递增递减运算符

    C++语言并不要求递增递减运算符必须是类的成员。可是由于他们改变的正好是所操作对象的状态。所以建议设定为成员函数

    对于递增与递减运算符来说,有前置与后置两个版本号,因此。我们应该为类定义两个版本号的递增与递减运算符。


    问题来了。程序是怎样区分前置和后置呢?由于都是++和-- 为了解决问题,后置版本号的递增递减运算符接受一个额外的(不被使用)int类型的形參。当我们使用后置运算符时,编译器为这个形參提供一个值为0的实參。

    这个形參唯一的作用就是区分前置和后置运算符函数。

    由于不会用到int形參,所以无须为其命名。

    样例例如以下:

    Person & Person::operator++()//前置版本号的++
    {
    	age++;//only ++ age
    	return *this;
    }
    
    Person & Person::operator--()//前置版本号的--
    {
    	age--;
    	return *this;
    }
    
    Person & Person::operator++(int)//后置版本号的++
    {
    	Person &p = *this;
    	age++;
    	return p;
    }
    
    Person & Person::operator--(int)//后置版本号的--
    {
    	Person &p = *this;
    	age--;
    	return p;
    }
    int main()
    {
    	Person p1(20, "SCOTT");
    	Person p2(10, "Kate");
    	cout << p1 << endl;
    	p1--;
    	cout << p1 << endl;
    	
    	return 0;
    }

    上述代码比較简单,为了方便演示。在我们的Person中仅仅对Person类中的age成员变量进行了递增递减操作。


    执行结果:

    Init Person
    Init Person
    p.age: 20, p.name: SCOTT
    p.age: 19, p.name: SCOTT
    ~Person name: 0x8dcc048 age: 10
    ~Person name: 0x8dcc020 age: 19


    2.成员訪问运算符

    在迭代器类以及智能指针类中经常见到解引用运算符(*) 与 箭头运算符(->) 。

    我们也能够自己定义这两个运算符。


    样例:

    Person * Person::operator->()
    {
    	return this;
    }
    Person & Person::operator*()
    {
    	return *this;
    }
    int main()
    {
    	Person p1(20, "SCOTT");
    	Person p2(10, "Kate");
    
    	cout << p1->getName() << endl;
    	cout << (*p2).getName() << endl;
    	
    	return 0;
    }
    执行结果:

    Init Person
    Init Person
    SCOTT
    Kate

    ~Person name: 0x89d7048 age: 10
    ~Person name: 0x89d7020 age: 20


  • 相关阅读:
    如何处理DateTime日期时间格式
    ASP.NET访问域用户(AD活动目录)信息的类
    多层代理取真实IP地址
    自动播放MP3文件
    Windows7 下用 grub4dos 安装 Ubuntu
    javascript判断iphone/android手机横竖屏模式
    C#一个到多个Cookie的字符串添加到CookieCollection集合中【isGood代码】
    css 文本对齐4种方法
    让VirtualBox虚拟机实现开机自动后台运行
    MSXML2, XmlHttpClass基础
  • 原文地址:https://www.cnblogs.com/mfmdaoyou/p/6940159.html
Copyright © 2020-2023  润新知