C++学习之重载运算符1
C++除可重载函数之后,还允许定义已有的运算符,这样通过运算符重载可像处理数据使用它们。
先来个代码
#include<iostream>
using namespace std; class num
{
public:
num(){n=;}
~num(){}
int get() const{return n;}
void set(int x){n=x;}
private:
int n;
}; int main()
{
num i;
cout<<i.get()<<endl;
i++;
return ;
}
编译将提示一个错误:
--------------------Configuration: demo1 - Win32 Debug--------------------
Compiling...
demo.cpp
E:\CCDEMO\demo1\demo.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++重载运算符;以下使用运算符重载:
#include<iostream>
using namespace std; class num
{
public:
num(){n=;}
~num(){}
int get() const{return n;}
void set(int x){n=x;}
void add(){++n;}
void operator++(){++n;} //此处使用了重载运算符
private:
int n;
}; int main()
{
num i;
cout<<i.get()<<endl;
i.add();
cout<<i.get()<<endl;
++i;//这里使用++运算符
cout<<i.get()<<endl;
return ;
}
好了。编译一下,没有问题。这就是最简单的运算符重载。
C++学习之重载运算符1的更多相关文章
- C++学习笔记之运算符重载
一.运算符重载基本知识 在前面的一篇博文 C++学习笔记之模板(1)——从函数重载到函数模板 中,介绍了函数重载的概念,定义及用法,函数重载(也被称之为函数多态)就是使用户能够定义多个名称相同但特征标 ...
- C++学习28 重载>>和<<(输入输出运算符)
在C++中,系统已经对左移运算符“<<”和右移运算符“>>”分别进行了重载,使其能够用于输入输出,但是输入输出的处理对象只能是系统内建的数据类型.系统重载这两个运算符是以系统类 ...
- C++学习27 用全局函数重载运算符
运算符重载函数既可以声明为类的成员函数,也可以声明为所有类之外的全局函数. 运算符重载函数作为类的成员函数 将运算符重载函数声明为类的成员函数时,二元运算符的参数只有一个,一元运算符不需要参数.之所以 ...
- C++学习之路—运算符重载(二)运算符重载作为类的成员函数和友元函数
(根据<C++程序设计>(谭浩强)整理,整理者:华科小涛,@http://www.cnblogs.com/hust-ghtao转载请注明) 对运算符重载的函数有两种处理方式:(1)把运算符 ...
- C++学习之路—运算符重载(一)概念、方法及规则
(根据<C++程序设计>(谭浩强)整理,整理者:华科小涛,@http://www.cnblogs.com/hust-ghtao转载请注明) 1 什么是运算符重载 先来说下什么是重载吧 ...
- C++ Primer 学习笔记_63_重载运算符和转换 --转换和类类型【上】
重载运算符和转换 --转换与类类型[上] 引言: 在前面我们提到过:能够用一个实參调用的位 unsignedchar 相同范围的值,即:0到255. 这个类能够捕获下溢和上溢错误,因此使用起来比内置u ...
- C#学习笔记(十六):索引器和重载运算符
二维数组如何映射到一维数组 重载运算符 1.算术运算符 2.关系运算符, < 和 > 成对重载 using System; using System.Collections.Generic ...
- 【dart学习】之运算符重载
一,什么是运算符重载(operator overloading) 在软件开发过程中,运算符重载(英语:operator overloading)是多态的一种.运算符重载通常只是一种语法糖,这种语法对语 ...
- 吴裕雄--天生自然C++语言学习笔记:C++ 重载运算符和重载函数
C++ 允许在同一作用域中的某个函数和运算符指定多个定义,分别称为函数重载和运算符重载. 重载声明是指一个与之前已经在该作用域内声明过的函数或方法具有相同名称的声明,但是它们的参数列表和定义(实现)不 ...
随机推荐
- Jquery Enter事件
//IE或fireFox Event不同,所有要消除浏览器差异问题 <script type="text/javascript"> $('#<%=txtKeyWo ...
- HTML 5 全局属性和事件属性
1.HTML 5 全局属性 HTML 属性能够赋予元素含义和语境. 下面的全局属性可用于任何 HTML5 元素. NEW:HTML 5 中新的全局属性. 属性 描述 accesskey 规定访问元素的 ...
- Android常用组件Broadcast介绍
一.Broadcast简介 Broadcast是Android的四大组件之一.可分为: 1.普通广播 发送一个广播,所有监听该广播的广播接收者都可以监听到改广播. 2.异步广播 当处理完之后的Inte ...
- locate: can not stat () `/var/lib/mlocate/mlocate.db': No such file or directory
安装好CentOS后,第一次进入系统使用locate命令,结果出现:locate: can not stat () `/var/lib/mlocate/mlocate.db': No such fil ...
- MySQL的表分区(转载)
MySQL的表分区(转载) 一.什么是表分区 通俗地讲表分区是将一大表,根据条件分割成若干个小表.mysql5.1开始支持数据表分区了. 如:某用户表的记录超过了600万条,那么就可以根据入库日期将表 ...
- <link>: rel, href
Reference: http://www.w3schools.com/tags/tag_link.asp <link> Attributes: Attribute Value Descr ...
- mysql 主键自增
比如创建表格,表格ID需要自增 将ID设置成主键,并配置auto_increment 例: create table test( id int(4) not null primary key ...
- UVA 10375 Choose and divide
n! 分解素因子 快速幂 ei=[N/pi^1]+ [N/pi^2]+ …… + [N/pi^n] 其中[]为取整 ei 为数 N!中pi 因子的个数: #include <iostream& ...
- 一个Java项目的学习
1. java命令行的启动 首先是gradle build 其次是:java -Dabc.appid=1234 -classpath "a.jar:b.jar" com.ctri ...
- NEC遥控信号解码(包含完整代码)
一.遥控器解码说明 1.遥控器的编码格式常见有两种,一种是NEC 格式,一种是RC5 格式.遥控器发出的信号,通过一个红外的接收头之后,信号被送到MCU 的一个中断引脚.通过MCU 来识别不同的时序, ...