多态和虚函数和抽象类


如果希望通过 p 指针访问 Student 类的成员函数,可以将该成员函数声明为虚函数,请看下面的代码:


    
    
  1. #include <iostream>
  2. using namespace std;
  3. class People{
  4. protected:
  5. char *name;
  6. public:
  7. People(char *name):name(name){}
  8. //加virtual关键字声明为虚函数
  9. virtual void display(){ cout<<"People: "<<name<<endl;}
  10. };
  11. class Student: public People{
  12. public:
  13. Student(char *name):People(name){}
  14. //加virtual关键字声明为虚函数
  15. virtual void display(){ cout<<"Student: "<<name<<endl;}
  16. };
  17. int main(){
  18. People *p = new People("Xiao Ming");
  19. p->display();
  20. p = new Student("Li Lei");
  21. p->display();
  22. return 0;
  23. }
运行结果:
People: Xiao Ming
Student: Li Lei

这段代码仅仅是在 display() 函数声明前加了一个  virtual  关键字,将成员函数声明为了 虚函数(Virtual Function) 。这样,就可以通过 p 指针调用 Student 类的成员函数了,运行结果也证明了这一点。

借助虚函数,基类指针既可以使用基类的成员函数,也可以使用派生类的成员函数,它有多种形态,或多种表现方式,这就是多态(Polymorphism)。


构成多态的条件
多态存在的三个条件:
必须存在继承关系;
继承关系中必须有同名的虚函数,并且它们是覆盖关系(重载不行)。
存在基类的指针,通过该指针调用虚函数。

然后是虚函数,它的特点有:

1.虚函数不能和重载函数一样,进行修改它的参数,返回类型。

2。虚函数只能和定义的类型,返回值类型一模一样。

它具有关键词  virtual  还有一个纯虚函数  它的定义列如:virtual void main ()=0;而且虚函数对于多态具有决定性的作用,有虚函数才能构成多态。


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值