前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >C++学习之路——函数重载和运算符重载

C++学习之路——函数重载和运算符重载

作者头像
全栈程序员站长
发布于 2022-09-23 11:45:22
发布于 2022-09-23 11:45:22
44000
代码可运行
举报
运行总次数:0
代码可运行

大家好,又见面了,我是你们的朋友全栈君。

一、函数重载

C++允许在同一作用域中的某个函数和运算符指定多个定义,分 别称为函数重载和运算符重载

重载声明是指一个与之前已经在该作用域内声明过的函数或方法 具有相同名称的声明,但是它们的参数列表和实现不相同。当您调用一个重载函数或重载运算符时,编译器通过把您所使用的参数类型与定义中的参数类型进行比较,决定选用最合适的定义。选择最合适的重载函数或重载运算符的过程,称为重载决策。 C++中的函数重载

在同一个作用域内,可以声明几个功能类似的同名函数,但是这 些同名 函数的形式参数(指参数的个数、类型或者顺序)必须不同。 您不能仅通过返回类型的不同来重载函数。 下面的实例中,同名函数 print() 被用于输出不同的数据类型:

二、运算符重载

重载的运算符是带有特殊名称的函数,函数名是由关键字 oper ator 和其后要重载的运算符符号构成的。与其他函数一样,重载运算 符有一个返回类型和一个参数列表。 Box operator + (const Box &);

声明加法运算符用于把两个 Box 对象相加,返回最终的 Box 对象。 大多数的重载运算符可被定义为普通的非成员函数或者被定义为类成 员函数。如果我们定义上面的函数为类的非成员函数,那么我们需要 为每次操作传递两个参数,如下所示: Box operator+(const Box&, const Box&);

可重载运算符/不可重载运算符

例题:

用一个程序实现课程中讲过之外的三种运算符重载,其中new/delete为必选项,其他两个任选。

代码如下:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
//new delete的重载
class A { 
   
	int i;
	int j;
public:
	A() { 
    cout << "A()" << endl; }

	void *operator new(size_t size)
	{ 
   
		void *p;
		p = (void *)malloc(size);
		cout << "为对象申请字节空间为" << size << endl;
		return p;
	}
	void operator delete(void *p)
	{ 
   
		cout << "删除申请的字节空间" << endl;
		free(p);
	}


	void *operator new[](size_t size)
	{ 
   
		void *p;
		p = (void*)malloc(size);
		cout<< "为对象申请的内存单元个数" << size << endl;
		return p;
	}


		void operator delete[](void *p)
	{ 
   
		cout << "删除为申请的内存单元个数" << endl;
		free(p);
	}
};

class B
{ 
   
public:
	double a;
	B(double x)
	{ 
   
		a = x;
	}
	double operator /(B m);

};
double B::operator /(B m)
{ 
   
	double x1;
	x1 = a / m.a;
	return x1;
}

//class C
//{ 
   
//public:
// string ss;
// C(string s)
// {ss = s;}
// C &operator =(const C &);
//private:
// char *p1;
//};
//
//C &C::operator =(const C &m)
//{ 
   
// if (this==&m)
// { 
   
// return *this; //防止s=s的赋值
// }
// char *p2;
// p2 = new char[strlen(m.p1) + 1];//分配新区域 
// strcpy(p2, m.p1); //字符串复制
// delete p1;
// return *this;
//}

class D
{ 
   
public:
	double a;
	D(double x)
	{ 
   
		a = x;
	}
	double operator *(D m);

};
double D::operator *(D m)
{ 
   
	double x1;
	x1 = a * m.a;
	return x1;
}

int main()
{ 
   
	cout << "************************" << endl;
	cout << "new delete的重载" << endl;
	A *a = new A;
	delete(a);
	A *a1 = new A[10];
	delete[] a1;

	cout << "************************"<< endl;
	cout << "/的重载" << endl;
	B b1(2.6);
	B b2(3.6);
	double b3;
	b3 = b1 / b2;
	cout << "b3的值为" << b3 << endl;

	//cout << "************************" << endl;
	//cout << "=的重载" << endl;
	//C c1("边牛牛");
	//C c2("真牛");
	//c2 = c1;

	cout << "************************" << endl;
	cout << "*的重载" << endl;
	D d1(2.6);
	D d2(9.6);
	double d3;
	d3 = d1 * d2;
	cout << "d3的值为" << d3 << endl;
	return 0;
}

结果为:

发布者:全栈程序员栈长,转载请注明出处:https://javaforall.cn/170998.html原文链接:https://javaforall.cn

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
C++ 重载运算符和重载函数
C++ 允许在同一作用域中的某个函数和运算符指定多个定义,分别称为函数重载和运算符重载。
狼啸风云
2020/10/28
2.1K0
运算符重载(看完这篇彻底掌握重载问题)
运算符重载:用同一个运算符完成不同的运算功能。 C++运算符重载的相关规定如下:
海盗船长
2020/08/27
9.8K1
【C++】运算符重载
注:最后有面试挑战,看看自己掌握了吗 文章目录 C++ 中的运算符重载 🍃博主昵称:一拳必胜客 特别鸣谢:木芯工作室 、Ivan from Russia ---- C++ 中的运算符重载 您可以重定义或重载大部分 C++ 内置的运算符。这样,您就能使用自定义类型的运算符。 重载的运算符是带有特殊名称的函数,函数名是由关键字 operator 和其后要重载的运算符符号构成的。与其他函数一样,重载运算符有一个返回类型和一个参数列表。 Box operator+(const Box&);
20岁爱吃必胜客
2022/11/13
5730
C++面向对象学习之运算符重载(1)
运算符重载(函数重载)是C++多态的重要实现手段之一。通过运算符重载对运算符功能进行特殊定制,使其支持特定类型对象的运算,执行特定的功能,增强C++的扩展功能。
glm233
2020/09/28
8770
运算符重载
流操作符>>,<<一般使用非成员函数实现,也就是友元函数实现,这样可以符合程序员的惯性思维
DeROy
2020/05/11
9810
C++基础——C++面向对象之重载与多态基础总结(函数重载、运算符重载、多态的使用)
原文链接:https://winter.blog.csdn.net/article/details/129397401
Winter_world
2023/03/09
9840
C++基础——C++面向对象之重载与多态基础总结(函数重载、运算符重载、多态的使用)
C++ 类、继承、重载《Rice C++ 学习开发》
作者有个自己的想法,如果C语言编写开发中,能把面向对象的思想添加进去,可以让代码更加美观,更加简洁,特别是代码复用。要让代码实现《高内聚、低耦合》,这样写代码才比较有意义。工作一年后,发现读大学的时候,做项目的代码感觉就像一坨shi一样。只要想到什么就写什么,完全没有代码复用的概念。
Rice加饭
2022/05/09
6590
C++笔记:运算符重载
函数重载就是对一个已有的函数赋予新的含义,使之实现新功能,做到“一名多用”。 运算符也可以重载,在C++标准库中也使用了大量的运算符重载。例如:
DioxideCN
2022/08/05
1.4K0
8.4 C++ 运算符重载
C/C++语言是一种通用的编程语言,具有高效、灵活和可移植等特点。C语言主要用于系统编程,如操作系统、编译器、数据库等;C语言是C语言的扩展,增加了面向对象编程的特性,适用于大型软件系统、图形用户界面、嵌入式系统等。C/C++语言具有很高的效率和控制能力,但也需要开发人员自行管理内存等底层资源,对于初学者来说可能会有一定的难度。
王瑞MVP
2023/10/21
2190
8.4 C++ 运算符重载
C++之运算符重载(一)
C++支持运算符重载。运算符重载的好处是使得使用类的人更加方便。设计类的人只不过是把设计函数变成了设计运算符重载。因此,运算符重载的本质仍旧是一个函数。
zy010101
2020/04/08
4650
C++之运算符重载(一)
运算符重载
运算符重载是一种形式的c++多态,上一张笔记的函数重载也可以叫做函数多态,运算符重载将重载的概念扩展到运算符上,允许C++++运算符有多种含义。很多C++运算符已经被重载,例如 将解引用符号*,但他用于数值之间就是乘积,C++根据操作数的数目和类型来决定采用哪种操作。 C++允许将运算符重载扩展到我们自己定义的类型,例如可以让两个对象相加,编译器根据操作数的数目和类型决定使用哪种加法定义。 例:
用户7272142
2023/10/16
1550
运算符重载
C/C++开发基础——运算符重载
运算符重载在C++的特性中并不算很特别,这次把它单独拿出来作为一个章节是想借助运算符重载的一些样例来回顾一下C++的一些语法特性,代码量比较多,但是都很经典。
Coder-ZZ
2023/11/21
1830
C/C++开发基础——运算符重载
C++运算符重载(四)之赋值运算符重载
如果指针不为空就释放指针指向的堆区内存,并且让指针的指向改为NULL,防止之后误操作。
CtrlX
2022/09/21
8620
C++运算符重载
对于条件表达式 a>b ? x : y,先计算条件b,然后进行判断。如果a>b 的值为true(1),计算x的值,运算结果为x的值;否则,计算y的值,运算结果为y的值。
zhangjiqun
2024/12/16
2040
[C++] 类和对象:运算符重载
在C++中,运算符重载是一种强大的特性,它允许我们重新定义已有的运算符,以便用于用户自定义的数据类型。通过运算符重载,我们可以使得我们自定义的类对象像内置类型一样进行运算,这为编写清晰、简洁且易于理解的代码提供了便利。
DevKevin
2024/05/12
1550
[C++] 类和对象:运算符重载
C++ 运算符重载
本文引用于“C语言中文网”,我整理出来放在博客,方便大家共同学习。所有知识点和代码均已亲测可用,如有疑问,可提出,一起讨论学习。
用户7886150
2021/02/04
1.2K0
C++:12---运算符重载
C++98,C++0x,C++11对“哪些运算符重载能够重载”有一致的规定。详细例如以下:
用户3479834
2021/02/03
6060
C++:12---运算符重载
C++运算符重载和函数重载
所谓重载,就是赋予新的含义。函数重载(Function Overloading)可以让一个函数名有多种功能,在不同情况下进行不同的操作。运算符重载(Operator Overloading)也是一个道理,同一个运算符可以有不同的功能。
嵌入式视觉
2022/09/05
7900
C++中运算符重载详解
在C++编程中,运算符重载是一种强大的工具,它允许程序员改变已有运算符的行为,使其适应自定义类型。这篇文章将从基础开始,逐步深入到运算符重载的高级应用,帮助你从入门到精通。
码事漫谈
2024/12/27
2390
C++中运算符重载详解
九、运算符重载
运算符重载(Operator Overloading)是面向对象编程语言中的一种功能,它允许程序员为已存在的运算符(如 +, -, *, /, == 等)赋予新的意义,以便它们能够用于对象之间的操作。这种机制极大地提高了代码的可读性和易用性,因为它允许我们以更自然、更接近于数学表达式的方式来编写和操作对象。
用户11332765
2024/10/28
1880
相关推荐
C++ 重载运算符和重载函数
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验