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)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • cbow和skipgram适用于什么场景?_gram矩阵

    cbow和skipgram适用于什么场景?_gram矩阵在cbow方法中,是用周围词预测中心词,从而利用中心词的预测结果情况,使用GradientDesent方法,不断的去调整周围词的向量。当训练完成之后,每个词都会作为中心词,把周围词的词向量进行了调整,这样也就获得了整个文本里面所有词的词向量。要注意的是,cbow的对周围词的调整是统一的:求出的gradient的值会同样的作用到每个周围词的词向量当中去。可以看到,cbow预测行为的次数跟整个文本的…

    2025年9月24日
    6
  • DHCP_RELAY(Option60与Option82)[通俗易懂]

    DHCP_RELAY(Option60与Option82)[通俗易懂]DHCP_RELAY(Option60与Option82):http://wenku.baidu.com/view/2bac6d758e9951e79b8927e7.htmlDHCPOption82:DHCPRelayAgentInformationOption.提供DHCP的认证和安全机制。CID:AgentCircuitID RID:Agen

    2022年10月15日
    3
  • 美国空间Hostease支付宝人民币购买教程图解[通俗易懂]

    美国空间Hostease支付宝人民币购买教程图解[通俗易懂]这段时间买国外主机的筒子们越来越多,而付款就是首先摆在大家眼前的一道障碍,大部分美国主机商只能通过信用卡购买,付款不方便,因此能够使用支付宝支付的主机商也备受关注。而目前全球支持支付宝付款的美国主机商一共就三家,分别是ixwebhosting、Godaddy、HostEase。第二道障碍就是网站英文界面问题,目前只有ixwebhosting开通了中文站点,因此大家购买ixwebhost…

    2022年10月18日
    2
  • RTP协议全解析(H264码流和PS流)「建议收藏」

    RTP协议全解析(H264码流和PS流)「建议收藏」1RTPHeader解析2、RTP荷载H264码流2.1、单个NAL单元包2.2、分片单元(FU-A)3、RTP荷载PS流3.1、PS包头3.2、系统标题3.3、节目映射流3.4、PES分组头部

    2022年5月26日
    163
  • lua sort排序_python中列表排序的用法

    lua sort排序_python中列表排序的用法”’lua中对table的排序一般是用lua自带的table.sort()函数排序,一般不采用自己写的排序的方式,以下来说一说table.sort()排序和在工作中遇到的问题1.排序的方式table.sort(tbl,function(a,b)returna>bend)以上是一个简单的例子,得到的效果是对于待排序的数据的一个升序,你这样认为就是错了,例如a

    2022年8月12日
    4
  • c++中条件运算符_单目运算符有哪些

    c++中条件运算符_单目运算符有哪些条件运算符是C++中唯一一个三元运算符,要求有三个操作对象,条件表达式的一般形式为:表达式1?表达式2:表达式3条件运算符的执行顺序是,先求解表达式1,若为真则求解表达式2,此时表达式2的值作为整个条件表达式的值。若表达式1的值为假,则求解表达式3,表达式3的值为整个条件表达式的值。max=(a>b)?a:ba比b大时,关系表达式为真,条件表达式的值为a;b比a大时,关系表达式为假,条件

    2022年10月2日
    3

发表回复

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

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