今天小编给大家分享一下PHP多态性和虚函数实例分析的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧。
给出以下程序的执行结果。
#include <iostream> 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 <iostream.h> 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 <iostream.h> 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 <iostream.h> 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 <iostream>
#include <stdio.h>
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;i<count;i++)
if (p[i]->isgood()==True) //若为优秀,则输出之
p[i]->printname();
return 0;
}
以上就是“PHP多态性和虚函数实例分析”这篇文章的所有内容,感谢各位的阅读!相信大家阅读完这篇文章都有很大的收获,小编每天都会为大家更新不同的知识,如果还想学习更多的知识,请关注亿速云行业资讯频道。
亿速云「云服务器」,即开即用、新一代英特尔至强铂金CPU、三副本存储NVMe SSD云盘,价格低至29元/月。点击查看>>
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。
原文链接:https://www.xuebuyuan.com/3260401.html