首页 > 其他分享 >类和对象(运算符重载)

类和对象(运算符重载)

时间:2023-08-26 20:33:04浏览次数:39  
标签:person 对象 operator 运算符 ++ num 重载

运算符重载概念:对已有的运算符重现定义,赋予其另一种功能,以适应不同的数据类型。

对于内置类型,编译器知道如何进行运算。

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

1.加号运算符重载

作用:实现两个自定义数据类型相加的运算。

1.成员函数重载+号

class person

{

public:

//1.成员函数重载+号

person operator+(person& p)

{

 person temp;

 temp.m_a = this->m_a + p.m_a;

 temp.m_b = this->m_b + p.m_b;

 return temp;

}

int m_a;

int m_b;

};


void test()

{

person p1;

p1.m_a = 10;

p1.m_b = 10;

person p2;

p2.m_a = 20;

//成员函数重载本质调用

//person p3 = p1.operator+(p2);

   //简化后


person p3 = p1 + p2;

cout << "p3.m_a=" << p3.m_a << endl << "p3.m_b=" << p3.m_b << endl;

}


int main()

{

test();

system("pause");

return 0;

}


2.全局函数进行重载

person operator+ (person& p, person& p1)是全局函数

person operator+ (person& p, person& p1)

{

person temp;

temp.m_a = p1.m_a + p.m_a;

return temp;

}


//全局函数重载的本质调用

person p3 = operator+(p1, p2);

//简化后

//person p3 = p1 + p2;


递增运算符的调用

作用:通过重载递增运算符,实现自己的整形数据。

总结:前置递增返回引用,后置递增返回值。

例子:

#include <iostream>

using namespace std;


//递增运算符重载


class num

{

//前置++

//friend  ostream & operator<<(ostream& cout, num& p);


//后置++  

friend  ostream & operator<<(ostream& cout, num p);

 

public:

num()

{

 m_num = 0;

}


//重载前置++运算符

num &operator++()

{

 //先进行++运算 ,返回引用为了一直对一个数据进行递增操作

 m_num++;

 //再将自身返回

 return *this;

}


//重载后置++运算符

//void operator++(int)  int代表占位参数,用于区分前置和后置递增

//后置递增返回 值

num operator++(int)

{

 //先记录当前结果

 num temp=*this;

 


 //后递增

 m_num++;


 //最后将记录结果返回

 return temp;


}


private:

int m_num;

};


//创建前置++左移运算符重载

//ostream & operator<<(ostream& cout, num& p)

//{

// cout  << p.m_num;

// return cout;

//}


//创建后置++左移运算符重载

//因为是值传递  所以p不需要引用

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

{

cout << p.m_num;

return cout;

}


void test()

{

num Init;

cout<<++(++Init) << endl;

cout << Init << endl;

}


void test2()

{

num Init2;

cout << Init2++ << endl;

cout << Init2 << endl;


}

int main()

{

//test();

test2();

system("pause");

return 0;

}


赋值运算符重载

c++编译器至少各一个类添加4个函数

1.默认构造函数(无参,函数体为空)

2.默认析构函数(无参,函数体为空)

3.默认拷贝构造函数,对属性进行值拷贝

4.赋值运算符 operator=,对属性进行值拷贝。

如果类中有属性指向堆区,做赋值操作时也会出现深浅拷贝问题。


关系运算符

作用:重载关系运算符,可以让两个自定义对象进行对比操作。


函数调用运算符重载

1.函数调用运算符()也可以重载

2.由于重载后使用的方式非常像函数的调用,因此称为仿函数。

3.仿函数没有固定写法,非常灵活。

标签:person,对象,operator,运算符,++,num,重载
From: https://blog.51cto.com/u_15839001/7246057

相关文章

  • 学习笔记 - Java 面向对象_下
    static关键字如果想让一个成员变量被类的所有实例所共享,就用static修饰即可,称为类变量(或类属性)可修饰结构:属性、方法、代码块、内部类对比静态变量和实例变量个数静态变量:只有一份,被多个对象共享;实例变量:每一个对象都保存着一份实例变量;内存位置静态变量:存放在堆......
  • 基本运算符
    附一个Idea快捷键Ctrl+D复制当前行并粘贴到下一行......
  • java高频面试题(反射、对象拷贝)
    java高频面试题(反射、对象拷贝)什么是反射?反射主要是指程序可以访问、检测和修改它本身状态或行为的一种能力Java反射:在Java运行时环境中,对于任意一个类,能否知道这个类有哪些属性和方法?对于任意一个对象,能否调用它的任意一个方法Java反射机制主要提供了以下功能:在运行时判断任意一个......
  • JVM对象创建与内存分配机制深度剖析
    对象的创建对象创建的主要流程: 1.类加载检查 虚拟机遇到一条new指令时,首先将去检查这个指令的参数是否能在常量池中定位到一个类的符号引用,并且检查这个符号引用代表的类是否已被加载、解析和初始化过。如果没有,那必须先执行相应的类加载过程。 new指令对应到语言层......
  • js对象操作(object)
    声明对象varcan_args=newObject();对象赋值can_args={"vue":300,"jquery":200……};对象动态赋值(新建属性值)第一种:letkey="id";letvalue=2can_args[key]=value;console.error(can_args);//{"vue":300,"jquery":200,......
  • java数组、面向对象的引入
    packagecom.momo.demo;publicclassMain{publicstaticvoidmain(String[]args){int[]arr=newint[3];System.out.println(arr);System.out.println(arr[0]);System.out.println(arr[1]);System.out.println(arr[2]);arr[0]=55;arr[2]=66;System.o......
  • JavaScript-算术运算符
    概述JavaScript共提供10个算术运算符,用来完成基本的算术运算。加法运算符:x+y减法运算符: x-y乘法运算符: x*y除法运算符:x/y指数运算符:x**y余数运算符:x%y自增运算符:++x 或者 x++自减运算符:--x 或者 x--数值运算符: +x负数值运算符:-x减法、乘法、除法运算法比较单纯......
  • 通过Maven将文件上传到阿里云对象存储OSS
    首先在阿里云开通对象存储OSS功能(免费的),然后在Bucket列表中创建一个Bucket,地域建议选择华东1(杭州),因为这样后面就不用修改Endpoint,或者你直接记住Endpoint也行,读写仅限为公共读,其他的选项就默认的就行了。然后在右上角的头像初点击AccessKey管理,选择继续使用AccessKey,点击创建Ac......
  • Python 运算符优先级
    Python运算符优先级所谓优先级,就是当多个运算符同时出现在一个表达式中时,先执行哪个运算符。例如对于表达式a+b*c,Python会先计算乘法再计算加法;b*c的结果为8,a+8的结果为24,所以d最终的值也是24。先计算*再计算+,说明*的优先级高于+。Python支持几十种运算符,被划分......
  • 无涯教程-Python - 类/对象
    如果您以前没有使用面向对象(OO)编程的经验,则可能需要查阅有关它的入门课程或至少某种形式的教程,以便掌握基本概念。创建类class语句创建一个新的类定义。该类的名称紧随关键字class后跟冒号,如下所示-classClassName:'Optionalclassdocumentationstring'class......