多态,重载,覆盖区别与联系

本文通过C++代码示例详细解释了多态和重载的概念,包括如何在基类和派生类中实现多态行为,以及如何在同一个类中使用重载提供不同的函数版本。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >


覆盖:在基类中定义了一个非虚拟函数,然后在派生类中又定义了一个同名同参数同返回类型的函数,这就是覆盖了。
重载:有两个或多个函数名相同的函数,但是函数的形参列表不同。在调用相同函数名的函数时,根据形参列表确定到底该调用哪一个函数。
多态:在基类中定义了一个虚拟函数,然后在派生类中又定义一个同名,同参数表的函数,这就是多态。多态是这3种情况中唯一采用动态绑定技术的一种情况。也就是说,通过一个基类指针来操作对象,如果对象是基类对象,就会调用基类中的那个函数,如果对象实际是派生类对象,就会调用派生类中的那个函数,调用哪个函数并不由函数的参数表决定,而是由函数的实际类型决定。

#include <iostream>
using namespace std;

class A
{
public:
	void display1(){cout << "A:display1" << endl;} //display1重名叫覆盖
	void display2(int a, int b){cout << "A:display2" << endl;} 
	//父子类不支持重载的,因为如果在外面初始化的话,需要加上作用域的A::display2(), B::display2()的
	virtual void display3(){cout << "A:display3" << endl;} //多态
};

class B:public A
{
public:
	void display1(){cout << "B:display1" << endl;}
	void display2(float a){cout << "B:display2" << endl;} //display2重名叫重载
	void display2(int a, int b){cout << "B:display2(int int)" << endl;}
	void display3(){cout << "B:display3" << endl;}
	
};

int main(int argc, char const *argv[])
{
	B b;
	b.display2(1,2);
	b.display2(0.123);

	//多态
	A *a =new B;
	a->display3();

	return 0;
}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值