C++:重载、重写与重定义

一、重载、重写与重定义的概念

C++中,重载、重写和重定义是三个与函数和类成员相关的概念,但它们具有不同的含义和用途。

重载:是指在同一作用域内,可以有多个名称相同但参数列表(参数类型、参数个数或参数顺序)不同的函数或成员函数。这些函数可以是普通的函数,也可以是类的成员函数。通过函数重载,我们可以使用相同的函数名来执行不同的任务,这取决于传递给函数的参数类型和数量。

在C++中,一个类可以有多个构造函数,只要它们的参数列表不同即可。这种情况下,我们可以说这些构造函数是重载的。

class MyClass 
{
public:
	// 无参构造函数  
	MyClass() {
		// ...  
	}
	// 带一个整型参数的构造函数  
	MyClass(int value) {
		// ...  
	}
	// 带一个浮点型参数的构造函数  
	MyClass(double value) {
		// ...  
	}
	// 带两个参数的构造函数  
	MyClass(int a, double b) {
		// ...  
	}
};

 重定义(隐藏):也称为重复定义或重复声明,通常指的是在相同的作用域内多次定义同一个函数或变量,这会导致编译错误。但是,在类继承的上下文中,当我们说“重定义”时,可能是指派生类中对基类成员变量的重新声明,或者对基类非虚成员函数的重新声明,因为它会隐藏基类中的成员。

class A
{
public:
	void fun()
	{
		cout << "func()" << endl;
	}
};
class B : public A
{
public:
	void fun(int i)
	{
		A::fun();
		cout << "func(int i)->" << i << endl;
	}
};

void Test()
{
	B b;
	b.fun(10);
};

重写(覆盖):特指在派生类中定义与基类虚函数同名、同参数列表(包括参数类型、参数个数和参数顺序)的函数。重写用于实现基类和派生类之间的多态性。当通过基类指针或引用来调用一个虚函数时,如果指针或引用指向的是派生类对象,那么将调用派生类中重写的虚函数,而不是基类中的函数。这允许派生类为基类中的虚函数提供自己的实现。

class Base {
public:
	virtual void func1() { cout << "Base::func1" << endl; }
	virtual void func2() { cout << "Base::func2" << endl; }
private:
	int a;
};
class Derive :public Base {
public:
	virtual void func1() { cout << "Derive::func1" << endl; }
	virtual void func3() { cout << "Derive::func3" << endl; }
	virtual void func4() { cout << "Derive::func4" << endl; }
private:
	int b;
};

二、重载、重写与重定义的对比

  • 11
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值