【C++】虚函数与多态

一、虚函数

类成员方法(除过构造函数)前使用virtual关键字,将函数声明成虚函数。类外实现函数的定义无需在前加virtual关键字。

class Person
{
public:
	virtual void work()
	{
		cout << "工作" << endl;
	}
};

二、多态

静态多态:编译期间就已经确定函数的调用时机(函数重载、运算符重载)
动态多态:运行时确定函数的调用时机

动态多态触发条件:

  1. 公有继承中
  2. 基类含有虚函数&&派生类重写虚函数
  3. 使用基类指针或引用访问派生类成员方法
class Person
{
public:
	virtual void work()
	{
		cout << "工作" << endl;
	}
};
class Student : public Person
{
public:
	virtual void work()
	{
		cout << "学习" << endl;
	}
};

class Programmer : public Person
{
public:
	virtual void work()
	{
		cout << "编程" << endl;
	}
};

void HowWork(Person* p)
{
	p->work();
}
int main()
{
	Student stu;
	Programmer code;
	HowWork(&stu);
	HowWork(&code);
	return 0;
}

在这里插入图片描述
总结:

  1. 虚函数适用于有继承关系的类对象(类的成员函数才能设置成虚函数)
  2. 静态成员函数不能作为虚函数(不依赖于对象)
  3. 成员函数内联不能作为虚函数(每个对象一份拷贝,无映射关系)
  4. 构造函数不可以作为虚函数(调用构造函数时,对象还未被实例化)
  5. 基类和派生类中动态分配内存空间时,需要将析构函数定义为虚函数(实现析构对象的多态性)
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值