C++:多态之重载

简介:     在C++中,有两种重载,一种是函数的重载,另一种是运算符的重载。     C++的重载最早出现在基本运算符上。例如,加法操作只有一个运算符+,但是它却可以实现整数,浮点数,指针的加法运算。

    在C++中,有两种重载,一种是函数的重载,另一种是运算符的重载。

    C++的重载最早出现在基本运算符上。例如,加法操作只有一个运算符+,但是它却可以实现整数,浮点数,指针的加法运算。函数的重载与运算符的重载实现的效果一样,都是一种东西,实现相似的功能,只是在调用时,使用的参数的个数或类型上有不同。

    函数的重载

  如下,定义了4个函数,它们的名字都是:myMax(),但是,其中的参数各不相同,在调用函数时,通过判断函数中所给的参数的个数和类型来判断调用的是哪一个函数。


#include<iostream>
#include<cstring>
using namespace std;

int myMax(int x,int y);	//比较两个整数
char myMax(char first,char second);	//比较两个字符
double myMax(double u,double v);  //比较两个小数
char * myMax(char * frist,char * second);   //比较两个字符串

int main()  //主函数
{
	cout<<"in 3 and 5,the max number is "<<myMax(3,5)<<endl;  //调用比较整数的函数
	cout<<"in c and t the max char is:"<<myMax('c','t')<<endl;   //调用比较字符的函数
	cout<<"in 3.1 and -5.3,the max double number is:"<<myMax(3.1,-5.3)<<endl;  //调用比较浮点数的函数
	cout<<"in what and where the max string is:"<<myMax("what","where")<<endl;  //调用比较字符的函数

}


//下面为函数体

int myMax(int x,int y)  //比较两个整数
{
	if(x>y) return x;
	else return y;
}

char myMax(char first,char second)  //比较两个字符
{
	if(first>second) return first;
	else return second;

}

double myMax(double u,double v)  //比较两个小数
{
	if(u>v) return u;
	else return v;
}

char * myMax(char * first,char * second)   //比较两个字符串
{
	if(strcmp(first,second)>0) return first;
	else return second;

}

  


运行的结果如下:



  在函数重载时一定要注意的是:函数重载至少要在参数个数或参数类型上有所不同,否则在调用时,编译器无法区分到底调用的是哪个函数。


运算符的重载

运算符重载运行把标准运算符如:+ ,-,*,<等应用于定制数据类型的对象.为此,要编写一个函数,重新定义运算符,来说明重载后的运算符是如何使用的,起到什么作用.

 

重载给定运算符的函数名由关键字operator和要重载的运算符组成。

 

    例如:现在需要一个空间三维点坐标相加的操作,需要重写+运算符,来实现两点直接相加。

  

#include<iostream>
using namespace std;

class Point   //定义三维空间中的一个点
{
public:

	Point(int i,int j,int k):x(i),y(j),z(k) {};   //点的构造函数
	
	int x,y,z;
	
	Point operator + (Point p2)   //定义两个点相加的操作
	{
		x+=p2.x;
		y+=p2.y;
		z+=p2.z;

		return Point(x,y,z);
	}
	
};

int main()
{
	Point P1(1,2,3);
	Point P2(4,5,6);
	Point P3(0,0,0);

	P3=P1+P2;  //将两个点相加,结果保存到P3中
	
	cout<<P3.x<<endl;
	cout<<P3.y<<endl;
	cout<<P3.z<<endl;
	
return 0;
	
}

结果如下:

  


在上面的程序中,重写了+这个运算符,其中,参数只有一个点,因为这里返回的x,y,z,在实际运行时,是隐含了this指针的,所以运行结果实际是保存在了P1中。


  

目录
相关文章
|
9月前
|
存储 人工智能 编译器
c++--多态
上一篇文章已经介绍了c++的继承,那么这篇文章将会介绍多态。看完多态的概念,你一定会感觉脑子雾蒙蒙的,那么我们先以举一个例子,来给这朦胧大致勾勒出一个画面,在此之前,先介绍一个名词虚函数,(要注意与虚拟继承区分)重定义: 重定义(隐藏)只要求函数名相同(但要符合重载的要求,其实两者实际上就是重载);重定义下:在这种情况下,如果通过父类指针或引用调用函数,会调用父类的函数而不是子类。重定义(或称为隐藏)发生的原因是因为函数名相同但参数列表不同,导致编译器无法确定调用哪一个版本的函数。
172 0
|
存储 编译器 C++
【c++】多态(多态的概念及实现、虚函数重写、纯虚函数和抽象类、虚函数表、多态的实现过程)
本文介绍了面向对象编程中的多态特性,涵盖其概念、实现条件及原理。多态指“一个接口,多种实现”,通过基类指针或引用来调用不同派生类的重写虚函数,实现运行时多态。文中详细解释了虚函数、虚函数表(vtable)、纯虚函数与抽象类的概念,并通过代码示例展示了多态的具体应用。此外,还讨论了动态绑定和静态绑定的区别,帮助读者深入理解多态机制。最后总结了多态在编程中的重要性和应用场景。 文章结构清晰,从基础到深入,适合初学者和有一定基础的开发者学习。如果你觉得内容有帮助,请点赞支持。 ❤❤❤
1383 0
|
编译器 C++
c++中的多态
c++中的多态
|
编译器 C++
C++入门12——详解多态1
C++入门12——详解多态1
181 2
C++入门12——详解多态1
|
存储 编译器 数据安全/隐私保护
【C++】多态
多态是面向对象编程中的重要特性,允许通过基类引用调用派生类的具体方法,实现代码的灵活性和扩展性。其核心机制包括虚函数、动态绑定及继承。通过声明虚函数并让派生类重写这些函数,可以在运行时决定具体调用哪个版本的方法。此外,多态还涉及虚函数表(vtable)的使用,其中存储了虚函数的指针,确保调用正确的实现。为了防止资源泄露,基类的析构函数应声明为虚函数。多态的底层实现涉及对象内部的虚函数表指针,指向特定于类的虚函数表,支持动态方法解析。
178 1
|
C++
C++入门13——详解多态2
C++入门13——详解多态2
247 1
|
存储 编译器 C++
【C++】深度解剖多态(下)
【C++】深度解剖多态(下)
188 1
【C++】深度解剖多态(下)
C++(十九)new/delete 重载
本文介绍了C++中`operator new/delete`重载的使用方法,并通过示例代码展示了如何自定义内存分配与释放的行为。重载`new`和`delete`可以实现内存的精细控制,而`new[]`和`delete[]`则用于处理数组的内存管理。不当使用可能导致内存泄漏或错误释放。
|
存储 编译器 C++
C++基础知识(七:多态)
多态是面向对象编程的四大基本原则之一,它让程序能够以统一的接口处理不同的对象类型,从而实现了接口与实现分离,提高了代码的灵活性和复用性。多态主要体现在两个层面:静态多态(编译时多态,如函数重载)和动态多态(运行时多态,主要通过虚函数实现)。
245 21