C++多态

多态:通过基类指针访问派生类成员。C++语言的多态性分编译时多态和运行时多态 ,编译时多态可以通过函数重载实现,具体表现在根据参数的个数和类型不同选择合适的同名函数 ,模板属于编译时多态性,因为编译时自动根据模板生成模板函数。 运行时多态通过虚函数(https://blog.csdn.net/yqning123/article/details/82873069实现,就是运行时根据对象类型自动选择正确的调用接口。运行时多态是根据对象类型自动选择正确的调用函数,也叫动态绑定。 

 

 

1、构成多态的条件

1)必须存在继承关系
2)继承中,必须有同名的虚函数,并且他们是覆盖关系,而不是重载关系

(多态,重载,覆盖区别与联系https://blog.csdn.net/yqning123/article/details/82872975
3)存在基类指针,通过基类指针调用子类同名函数

#include <iostream>
using namespace std;

class Human
{
	char *name;
	int age;
public:
	virtual void get_info(){ //方法2:使用虚函数,这样子类实现多态,可以调用父类的方法,也能调用子类的方法
		cout << "Human Info:" << endl;
	}
	
};

class SoftHuman:public Human
{
	char *language;
public:
	void get_info(){
		cout << "SoftHuman Info:" << endl;
	}
};

int main(int argc, char const *argv[])
{
	SoftHuman sh;
	sh.get_info(); //调用子类方法
	sh.Human::get_info(); //调用父类方法

	cout << "===========================" << endl;

	Human *h = new SoftHuman; //父类new子类,因为子类包含父类的东西,是父类的一个扩展
	h->get_info(); //用的是父类的方法
	//如何调用子类的方法?
	((SoftHuman *)h)->get_info(); //方法1:强制转换
								  //方法2:见Human的get_info()

	((Human *)h)->get_info(); //父类使用虚函数之后,即使强制父类指针也没法调用父类方法
	h->Human::get_info(); //这个时候,想要调用父类函数,只能使用作用域的方法
	cout << "===========================" << endl;
	/*
	SoftHuman *s = new Human; //子类new父类是不可以的,
	s->get_info();
	*/
	SoftHuman *s = new SoftHuman; //但是子类new完之后,可以强转成Human*
	((Human *)s)->get_info(); //这里就是子类调用父类的方法
	return 0;
}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值