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

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

大家好,又见面了,我是你们的朋友全栈君。如果您正在找激活码,请点击查看最新教程,关注关注公众号 “全栈程序员社区” 获取激活教程,可能之前旧版本教程已经失效.最新Idea2022.1教程亲测有效,一键激活。

Jetbrains全系列IDE使用 1年只要46元 售后保障 童叟无欺

一、函数重载

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

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

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

二、运算符重载

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

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

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

在这里插入图片描述

在这里插入图片描述

例题:

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

在这里插入图片描述
代码如下:

//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.net/170998.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • 域名ssl证书怎么弄_nginx配置https证书

    域名ssl证书怎么弄_nginx配置https证书越来越多的第三方接入需要使用https了,很多时候不止到证书到那里免费申请,申请后怎么配置。免费证书和收费证书主要的差别有几点免费证书收费证书支持绑定域名数少支持绑定域名数多无保险费用有保险费用一年需要更换两年或三年可选颁发机构少更多的颁发机构证书免费申请的几个大平台阿里云腾讯云…

    2022年10月1日
    2
  • 安装 Prophet

    安装 Prophet本安装文档主要翻译整理自ProphetInstallation官方安装文档。在R上安装Prophet一、Windows系统安装Prophet前的准备工作如果是Windows系统,需要按照rstan提供的教程给R安装一个编译器。其中,最为关键的一步就是先安装Rtools。1.安装R和RStudio2.安装Rtools,确保其安装…

    2022年6月25日
    104
  • JAVA中调用CMD命令,并输出运行结果

    JAVA中调用CMD命令,并输出运行结果

    2021年11月16日
    44
  • 程序员不成熟的若干个特征

    程序员不成熟的若干个特征人成熟与不成熟跟年龄没有关系,人成熟不成熟,就是你能不能站在对方的角度去看待事物。就是能不能把我的世界变成你的世界。这个社会有很多的成年人,还没有脱离幼稚的行为。一点小事情就跟别人争来争去。人不成熟的第一个特征——就是立即要回报他不懂得只有春天播种,秋天才会收获。很多人在做任何事情的时候,刚刚付出一点点,马上就要得到回报。(学钢琴,学英语等等,刚开始就觉得难,发现不行,立即就要放弃。)做我们这个项目也是一样,很多人来做这个生意,开始没有什么成绩,就想着要放弃,有的人一个月放弃,有的人三个月放弃,有的

    2022年5月27日
    29
  • DB2数据库SQL语法参考手册

    DB2数据库SQL语法参考手册

    2021年5月6日
    153
  • BeanUtils.copyProperties 详解

    BeanUtils.copyProperties 详解简介BeanUtils提供对Java反射和自省API的包装,其主要目的是利用反射机制对JavaBean的属性进行处理我们知道,一个JavaBean通常包含了大量的属性,很多情况下,对JavaBean的处理导致大量get/set代码堆积,增加了代码长度和阅读代码的难度用法BeanUtils是这个包里比较常用的一个工具类,这里只介绍它的copyProperties()方法,该方法定义如下:publicstaticvoidcopyProperties(Object

    2022年10月4日
    4

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号