c++多态:静态多态和动态多态

多态:即多种形态。对不同对象发送同一消息,不同对象会做出不同的响应。多态分为静态多态和动态多态。
1.静态多态:
静态多态又称编译期多态:是指在**编译阶段就知道程序执行到这里接下来会执行哪个函数。**例如:函数重载,对象名加点操作符执行函数等都是静态多态。函数重载是函数名修饰规则从而确定执行哪个函数,而对象名加点操作符是通过this指针来确定的。
2.动态多态:
动态多态是利用虚函数实现运行时的多态,即在编译期并不知道接下来执行哪条语句,只有运行到这里才知道接下来要调用哪个函数。
实现动态多态的条件:
1.函数在基类中声明为虚函数,并且在派生类中重写;
2.对象的父类指针或引用,如果对象指向子类(子类对象的引用/指针赋给基类对象引用/指针),则调子类的虚函数;如果对象指向父类对象,则调父类的虚函数。

class A
{
public:
	virtual void func1()
	{
		cout << "A::func1()" << endl;
	}
	void display()
	{
		cout << "A::display()" << endl;
	}
	void display(int i)
	{
		cout << "A::display(int i)" << endl;
	}
protected:
	int _a;
};

class B : public A
{
public:
	virtual void func1()
	{
		cout << "B::func1()" << endl;
	}
protected:
	int _b;
};

void func(A& a)
{
	a.func1(); //动态多态
	a.display();  //函数重载 即静态多态
	a.display(10);
}


int main()
{
	A a;
	B b;
	func(a);
	func(b);
	system("pause");
	return 0;
}

在这里插入图片描述

已标记关键词 清除标记
©️2020 CSDN 皮肤主题: 大白 设计师:CSDN官方博客 返回首页