虚函数的租用时允许在派生类中重新定义与基类同名的函数,并且可以通过基类指针或引用访问基类和派生类中的同名函数。
- #include<iostream>
- #include<string>
- using namespace std;
- class Student{
- public:
- Student(int n,string na,float sc){num=n;name=na;score=sc;}
- virtual void show(){cout<<"num:"<<num<<" name:"<<name<<" score:"<<score<<endl;}
- protected:
- int num;
- string name;
- float score;
- };
- class Graduate:public Student
- {
- public:
- Graduate(int n,string na,float sc,float p):Student(n,na,sc),pay(p){}
- void show(){Student::show();cout<<" pay:"<<pay<<endl;}
- //void show(){cout<<"num:"<<num<<" name:"<<name<<" score:"<<score<<" pay:"<<pay<<endl;}
- private:
- float pay;
- };
- int main()
- {
- Student stud1(1001,"lili",87.5);
- Graduate grad1(2001,"lpc",88.9,5689);
- Student *pt=&stud1;
- pt->show();
- pt=&grad1;
- pt->show();
- /*
- pt->show();
- stud1.show();
- Graduate *pk=&grad1;
- pk->show();
- grad1.show();
- grad1.Student::show();*/
- return 0;
- }
在Student类中声明show函数时在最左边加一个关键字virtual:virtual void show();
这样就把Student类中的show函数声明为虚函数,在编译运行grad1中数据show就能全部显示出来
1、当把基类的每个成员函数声明为虚函数后,允许在其派生类中对该函数重新定义,赋予它新的功能,并且可以通过指向基类的指针指向同一类族中不同类的对象,从而调用其中的同名函数。使用方法:
在基类用virtual声明成员函数为虚函数。这样就可以在派生类中重新定义此函数,为它赋予新的功能,并能方便被调用。
2、在派生类中重新定义此函数,要求函数名,函数类型,函数参数个数和类型全部与基类的虚函数相同,并根据派生类的需要重新定义函数体。
3、定义一个指向基类对象的指针变量,并使它指向同一类族中某以对象。
4、通过该指针变量调用此虚函数,此时调用的就是指针变量指向的对象的同名函数。
多态性分为静态多态性和动态多态性。
静态多态性:在程序编译时系统就能决定调用的是哪个函数,因此也称为编译时的多态性。
动态多态性:在程序运行过程中才动态地确定操作所针对的对象,又称运行时的多态性。
确定调用的具体对象的过程称为关联
在编译时即可确定其调用的虚函数属于哪一类,其过程称为静态关联
在运行阶段把虚函数和对象绑定在一起的过程称为动态关联。
阅读(598) | 评论(0) | 转发(0) |