千家信息网

PHP多态性和虚函数实例分析

发表于:2025-01-19 作者:千家信息网编辑
千家信息网最后更新 2025年01月19日,今天小编给大家分享一下PHP多态性和虚函数实例分析的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来
千家信息网最后更新 2025年01月19日PHP多态性和虚函数实例分析

今天小编给大家分享一下PHP多态性和虚函数实例分析的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧。

理论练习题
  • 给出以下程序的执行结果。

#include  class A {  public:   virtual void f()  //虚函数     {             cout << "A::f() called." << endl;        } }; class B:public A {  public:        virtual void f()  //虚函数     {       cout << "B::f() called." << endl;        } }; void main(){  B b;       void (A::*pf)()=A::f;        (b.*pf)(); }

B::f() called.
  • 给出以下程序的执行结果

#include  class A {  public:        virtual void disp() //虚函数     {              cout << "Base class A." << endl;        } }; class B:public A {   public:        virtual void disp() //虚函数     {               cout << "Derived class B." << endl;        } }; class C:public A {   public:        virtual void disp() //虚函数     {             cout << "Derived class C." << endl;        } }; void main(){   A *ptr;        A a;        B b;        C c;        ptr=&a;        ptr->disp();        ptr=&b;        ptr->disp();        ptr=&c; }

 Base class A.  Derived class B.  Derived class C.
  • 分析以下程序的错误并改正

#include  class A {  int x; public:  A(int i) { x=i; }  void dispa() { cout << "x=" << x << endl; } }; class B : public A {  int y; public:  B(int i,int j):A(i) { y=j; }  void dispb() { cout << "y=" << y << endl; } }; void main() {  A *p,a(1);  B b(2,3);  p=&a;  p->dispa();  p=&b;  p->dispb(); }

:程序中说明了类A和派生类B,在main()中定义了类A对象指针p,先让p指向类A的对象a,执行p->dispa(),再让p指向类B的对象b,执行p->dispb()。由于这里采用的是静态联编方式,通过指针p只能调用类A的成员函数,而类A中没有dispb()成员函数,所以出错,编译时的错误信息如下:

error C2039: 'dispb' : is not a member of 'A'

改正的方法是将相关的成员函数改为虚函数,程序如下:

#include  class A {  int x; public:  A(int i) { x=i; }  virtual void disp()  //虚函数 {   cout << "x=" << x << endl; } }; class B : public A {  int y; public:  B(int i,int j):A(i) { y=j; }  void disp() { cout << "y=" << y << endl; } }; void main() {  A *p,a(1);  B b(2,3);  p=&a;  p->disp();  p=&b;  p->disp(); }

程序执行结果如下:

x=1 y=3
上机实习题
题目

设计一个评选优秀教师和学生的程序,其类结构如下图所示。当输入一系列教师或学生的记录后,将优秀学生及教师的姓名列出来,并采用相关数据进行测试。

解析:设计一个基类base,含纯虚函数isgood(),由base类派生出类student和类teacher,分别包含纯虚函数针对学生和教师为优秀的定义。对应的程序如下:

参考代码
#include  #include  using namespace std;  enum boolean {False,True};  class base  {  protected:   char name[8];  public:   void getname()   {    cout << "  姓名:";     cin >> name;    }     void printname()  {          cout << "  姓名:" << name << endl;     }    virtual boolean isgood()=0;  //纯虚函数 }; class student : public base {          int num;  public:     void getnum()  {              cout << "  考试成绩:";cin >> num;          }          boolean isgood() {                 return (num>90) ? True:False;         } }; class teacher:public base {          int num;  public:      void getnum()  {                   cout << "  每年发表论文数:";cin >> num;          }          boolean isgood() {                 return (num>3) ? True:False;         } }; int main() {          base *p[50];          student *pstud;          teacher *ptech;                  char ch;          int count=0;                  do  {                   cout << "输入教师(t)或学生(s):";                   cin>> ch;                   if (ch=='s')   {                            pstud=new student;                            pstud->getname();                            pstud->getnum();                            p[count++]=pstud;                   }                   else if (ch=='t')   {                            ptech=new teacher;                            ptech->getname();                            ptech->getnum();                            p[count++]=ptech;                   }                else                            cout << "输入错误" << endl;                   cout << "继续输入吗(y/n)?";                    cin >> ch;          } while (ch=='y');                  cout << "优秀学生或教师" << endl;          for (int i=0;iisgood()==True)      //若为优秀,则输出之            p[i]->printname();                 return 0;}

以上就是"PHP多态性和虚函数实例分析"这篇文章的所有内容,感谢各位的阅读!相信大家阅读完这篇文章都有很大的收获,小编每天都会为大家更新不同的知识,如果还想学习更多的知识,请关注行业资讯频道。

0