zoukankan      html  css  js  c++  java
  • C++学习之重载运算符1

    C++除可重载函数之后,还允许定义已有的运算符,这样通过运算符重载可像处理数据使用它们。

    先来个代码

     1 #include<iostream>
     2 using namespace std;
     3 
     4 class num
     5 {
     6 public:
     7     num(){n=1;}
     8     ~num(){}
     9     int get() const{return n;}
    10     void set(int x){n=x;}
    11 private:
    12     int n;
    13 };
    14 
    15 int main()
    16 {
    17     num i;
    18     cout<<i.get()<<endl;
    19     i++;
    20     return 0;
    21 }
    View Code

    编译将提示一个错误:

    --------------------Configuration: demo1 - Win32 Debug--------------------
    Compiling...
    demo.cpp
    E:CCDEMOdemo1demo.cpp(19) : error C2676: binary '++' : 'class num' does not define this operator or a conversion to a type acceptable to the predefined operator 此处提示没有该类没有重载++这个运算符;

    执行 cl.exe 时出错.

    demo1.exe - 1 error(s), 0 warning(s)

    将代码处:i++ 注释,编译即成功;如何解决以上问题,我们可以使用一函数解决,看以下代码:

    #include<iostream>
    using namespace std;
    
    class num
    {
    public:
    	num(){n=1;}
    	~num(){}
    	int get() const{return n;}
    	void set(int x){n=x;}
    	void add(){++n;}
    private:
    	int n;
    };
    
    int main()
    {
    	num i;
    	cout<<i.get()<<endl;
    	i.add();
    	cout<<i.get()<<endl;
    	//i++;
    	return 0;
    }
    

      以上能解决问题,但还没有现实我们所说的C++重载运算符;以下使用运算符重载:

     1 #include<iostream>
     2 using namespace std;
     3 
     4 class num
     5 {
     6 public:
     7     num(){n=1;}
     8     ~num(){}
     9     int get() const{return n;}
    10     void set(int x){n=x;}
    11     void add(){++n;}
    12     void operator++(){++n;} //此处使用了重载运算符
    13 private:
    14     int n;
    15 };
    16 
    17 int main()
    18 {
    19     num i;
    20     cout<<i.get()<<endl;
    21     i.add();
    22     cout<<i.get()<<endl;
    23     ++i;//这里使用++运算符
    24     cout<<i.get()<<endl;
    25     return 0;
    26 }
    View Code

    好了。编译一下,没有问题。这就是最简单的运算符重载。

  • 相关阅读:
    箭头函数的this、arguments详解
    webpack笔记
    关于proxy反向代理如何解决跨域问题的前世今生
    前端基础修炼日志(一):js内存管理机制
    前后端分离下的跨域问题以及CSRF攻击
    ES6之Promise
    浏览器缓存机制深入理解与实践(二):预加载
    浏览器缓存机制深入理解与实践(一)
    Go开发中的十大常见陷阱[译]
    网站必备之简繁切换功能实现
  • 原文地址:https://www.cnblogs.com/herojy886/p/4799392.html
Copyright © 2011-2022 走看看