C++多态

昨天讲了继承,那么今天就来讲讲同样属于C++三大特性的多态!
首先,什么是多态?我自己看了好多文章,但是说真的我都不是很懂类似于叫:多态就是同一个接口对于不同请求做出的不同处理这句话,但是在我对真理不屑的追求之下,我还是发现了最通俗的解释:
多态就是基类指针或引用表现出来的多种形态,他一会表现出父类形态(也就是指向自己),一会又可以表现出指向自己某个子类甚至(用指针数组)指向多个子类的形态,这就是C++多态的体现!
下面我们针对于这句理解作一详细的代码演示:

芜湖,说到多态,我居然忘记了把virtual老人家请出来介绍了,没有virtual修饰基类里面的函数,那怎么敢叫多态呢!所以说,virtual修饰基类里的函数,才可以体现出C++多态性来。
这下正式写代码展示:

class Base {
public:
	void func()
	{
		cout << "I am Father!" << endl;
	}
};
class Derived : public Base {
public:
	void func()
	{
		cout << "I am Son!" << endl;
	}
};

void foo(Base& b)
{
	b.func();
}

int main()
{
	Base b;
	Derived d;
	Base* p = &d;//父类指针指向子类对象
	Base& br = d;//父类引用指向子类对象
	
	b.func();
	d.func();
	p->func();
	br.func();
	foo(d);
}

看!这是我不用virtual修饰父类的func()函数的代码,那么他的输出就显而易见:
在这里插入图片描述
他除了第二个调用了子类里面的func()函数外,其他全部调用了父类的func()函数,这就没有体现出多态性来,那么当我们加上virtual关键之修饰父类func()函数之后效果就不一样了:

class base {
public:
	virtual void func() //在这里我们加上virtual关键字修饰
	{
		cout << "i am father!" << endl;
	}
};
class derived : public base {
public:
	void func()
	{
		cout << "i am son!" << endl;
	}
};

void foo(base& b)
{
	b.func();
}

int main()
{
	base b;
	derived d;
	base* p = &d;
	base& br = d;
	
	b.func();
	d.func();
	p->func();
	br.func();
	foo(d);
}

我们能来一下输出结果:在这里插入图片描述
看,这不就调到父类指针或者引用指向的地方了!

这就是C++多态性的体现

  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值