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 }

编译将提示一个错误:

--------------------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++重载运算符;以下使用运算符重载:

 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 }

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

时间: 2024-12-15 14:00:34

C++学习之重载运算符1的相关文章

C++ Primer Plus学习笔记之运算符重载

C++ Primer Plus学习笔记之运算符重载 1,成员函数和友元函数选择的建议 下面我们先看两个例子: 成员函数重载 #include<iostream> using namespace std; class Complex { public: Complex(double r=0,double i=0) { re=r; im=i; } Complex operator+(const Complex& obj); Complex operator!(); void Display

C++学习笔记之运算符重载

一.运算符重载基本知识 在前面的一篇博文 C++学习笔记之模板(1)——从函数重载到函数模板 中,介绍了函数重载的概念,定义及用法,函数重载(也被称之为函数多态)就是使用户能够定义多个名称相同但特征标(参数列表)不同的函数,目的是在对不同类型的参数执行相同的操作时只用一个同名的函数. 运算符重载,就是使同一个运算符在面临不同类型的数据时作出不同的操作(函数重载是操作相同),就是让同一个运算符有多重功能.实际上我们经常用的许多运算符已被重载,例如,将*用于地址,将得到存储在这个地址中的值:但将它用

C++学习28 重载&gt;&gt;和&lt;&lt;(输入输出运算符)

在C++中,系统已经对左移运算符“<<”和右移运算符“>>”分别进行了重载,使其能够用于输入输出,但是输入输出的处理对象只能是系统内建的数据类型.系统重载这两个运算符是以系统类成员函数的形式进行的,因此cout<< var语句可以理解为: cout.operator<<( var ) 如果我们自己定义了一种新的数据类型,需要用输入输出运算符去处理,那么就要重载.本节以前面的 complex 类为例说明输入输出运算符的重载. 重载输入运算符>> 下

C++学习27 用全局函数重载运算符

运算符重载函数既可以声明为类的成员函数,也可以声明为所有类之外的全局函数. 运算符重载函数作为类的成员函数 将运算符重载函数声明为类的成员函数时,二元运算符的参数只有一个,一元运算符不需要参数.之所以少一个参数,是因为这个参数是隐含的. 例如,上节的 complex 类中重载了加法运算符: complex operator+(const complex & A)const; 当执行: c3 = c1 + c2; 会被转换为: c3 = c1.operator+(c2); 通过 this 指针隐式

C++ Primer 学习笔记_63_重载运算符和转换 --转换和类类型【上】

重载运算符和转换 --转换与类类型[上] 引言: 在前面我们提到过:能够用一个实參调用的非explicit构造函数定义一个隐式转换.当提供了实參类型的对象须要一个类类型的对象时.编译器将使用该转换. 于是:这样的构造函数定义了到类类型的转换. 除了定义到类类型的转换之外,还能够定义从类类型到其它类型的转换.即:我们能够定义转换操作符,给定类类型的对象.该操作符将产生其它类型的对象.和其它转换一样,编译器将自己主动应用这个转换. 一.转换为什么实用? 定义一个SmallInt的类,该类实现安全小整

C++学习(五)_运算符重载

重载运算符 首先我们来看重载运算符的定义: 重载的运算符是带有特殊名称的函数,函数名是由关键字 operator 和其后要重载的运算符符号构成的.与其他函数一样,重载运算符有一个返回类型和一个参数列表. 在C++中支持的重载运算符有: 不支持的重载运算符: 重载运算符的规则 运算符重载为类的成员函数的一般语法形式为: 函数类型 operator 运算符(形参表) { 函数体: } 运算符重载为类的友元函数的一般语法形式为: friend 函数类型 operator 运算符(形参表) { 函数体:

从C过渡到C++须注意的几个知识点(结构体、引用、重载运算符)

一.结构体和类(class) 下面一个使用结构体类型的例子 1 #include <iostream> 2 using namespace std; 3 struct Point{ // 声明Point结构体类型 4 double x; // 成员变量,没有使用private和public时系统默认为公有类型成员变量 5 double y; 6 }; 7 int main() 8 { 9 Point p; // 定义的p在c里称为结构体变量 10 p.x = 3.2; // 因为x是公有类型可

第十五周oj刷题——Problem M: C++习题 矩阵求和--重载运算符

Description 有两个矩阵a和b,均为2行3列.求两个矩阵之和.重载运算符"+",使之能用于矩阵相加(如c=a+b). 重载流插入运算符"<<"和流提取运算符">>".使之能用于该矩阵的输入和输出. Input 两个2行3列矩阵 Output 矩阵之和 Sample Input 1 2 3 4 5 6 7 8 9 1 2 3 Sample Output 8 10 12 5 7 9 /* All rights res

第十五周oj刷题——Problem K: C++习题 复数类--重载运算符+,-,*,/

Description 定义一个复数类Complex,重载运算符"+","-","*","/",使之能用于复数的加.减.乘.除.运算符重载函数作为Complex类的成员函数.编写程序,分别求两个复数之和.差.积和商. Input 两个复数 Output 两个复数之和.差.积和商 Sample Input 3 4 5 -10 Sample Output c1+c2=(8.00,-6.00i) c1-c2=(-2.00,14.00