【C++】多态

    多态是什么意思?有人理解同名不同意思,就像前一篇非多态中的例子,都是sayHello,

自己的对象自己sayHello当然可以不同意思了,我自己的函数自己说的算。即使像最后的

基类指针指向子类对象,通过基类指针访问同名函数的时候,由于基类指针访问的内存大小

就是基类的大小,子类对象创建的时候会先创建基类对象,所以相当于还是在自己的对象里

访问自己的实现。这是C语言里的概念。

    OK,C++的多态则不是上面的意思,有人说了,我没法通过子类指针指向基类对象,这个我承认,

但是基类指针指向子类对象的时候,我能否访问子类的同名函数?也就是说我能否做到基类指针指向

基类对象的时候,访问的是基类对象的函数;当基类指针指向子类对象的时候,访问的是子类对象的函数。

这样我就可以通过一个基类指针指向对象的不同,获取不同的实现。

#include <iostream>
#include <cstdlib>


using namespace std;


class Father
{
public:
virtual void sayHello();
};


class Son: public Father
{
public:
void sayHello();
};


void Father::sayHello()
{
cout<<"Father say hello"<<endl;
}


void Son::sayHello()
{
cout<<"Son say hello"<<endl;
}


int main()
{
Father fatherIns;
Son sonIns;
Father *ptrFatherIns = &fatherIns;
Son *ptrSonIns = &sonIns;
Father &refFatherIns = fatherIns;
Father &refSon = sonIns;

/*1 自己的对象sayHello*/
ptrFatherIns->sayHello();
ptrSonIns->sayHello();

/*2基类指针指向子类对象,并且调用虚函数,会发生多态行为*/
cout<<"基类指针指向子类对象,并且调用虚函数"<<endl;
ptrFatherIns = &sonIns;
ptrFatherIns->sayHello();


/*3 子类指针不能访问
ptrSonIns = &fatherIns;
ptrSonIns->sayHello();
*/


/*4 基类引用子类对象,并且调用虚函数,会发生多态行为*/
cout<<"引用"<<endl;
refFatherIns.sayHello();
refSon.sayHello();

return 0;
}

    如上是C++多态的一个例子,主要基类对象中加上关键字virtual,在程序中通过

指向基类对象的指针,或者基类对象的运用,同时调用虚函数时,根据对象的不同,才发生

运行时的多态现象。

在举个通俗的例子,人都会说你好,中国人说“你好”,英国人说“hello”,我只需要通过不同基类指针指向

中国人还是英国人,就产生了多态的效果。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值