C++中重写重载重定义

本文详细解析了C++中函数重载、重写及重定义的区别与联系,重点介绍了它们在父类与子类之间的实现方式。通过具体代码示例,展示了如何正确使用这些特性来实现多态。

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

C++中重写重载重定义

函数重载:

必须在同一个类中进行,子类无法重载父类的函数,父类同名函数将被名称覆盖

        重载是在编译期间根据参数类型和个数决定函数调用

函数重写(使用virtual):

必须发生在父类和子类之间 并且父类和子类中的函数必须有完全相同的原型

使用virtual关键字之后能够产生多态(不使用virtual,叫重定义)

函数重定义(不使用virtual关键字)

必须发生在父类和子类之间

并且父类和子类中的函数必须有完全相同的原型


/**************************
本例子的意义在于说明重载重写重定义的关系:
特别要注意的是重载只能发生在类内部,不能发生在子类和父类之间
只要子类和父类中有同名函数,不论其参数类型异同(是否满足重载条件),
都会发生名称覆盖
***************************/
#include <cstdlib>
#include <iostream>

using namespace std;

class Parent
{
public:
	Parent()
	{
		cout << "Parent()" << endl;
	}
	virtual void func()
	{
		cout << "Parent:void fun()" << endl;
	}
	virtual void func(int i)
	{
		cout << "Parent:void fun(int i)" << endl;
	}
	virtual void func(int i, int j)
	{
		cout << "Parent:void func(int i, int j)" << endl;
	}
};

class Child : public Parent
{
public:
	virtual void func(int i, int j)
	{
		cout << "child:void func(int i, int j)" << endl;
	}
	void func(int i, int j, int k)
	{
		cout << "Child:void func(int i, int j, int k)" << endl;
	}
};

int main()
{
	Child c1;
	//以下调用是错的,重载只能发生在一个类中,这样调用由于名称覆盖,调用出错
	//c1.func();
	c1.Parent::func();//这样写才对

	system("pause");
}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值