设为首页 加入收藏

TOP

C++ 不使用virtual实现多态
2015-07-16 12:56:37 来源: 作者: 【 】 浏览:8
Tags:使用 virtual 实现

不使用virtual实现多态可以用成员函数指针完成。


成员函数指针形式:返回类型(A::*指针名)(形参表)


其中A是类类型,即这个指针是指向A类的成员函数的函数指针


例如:int(A::*P)(int,int)这是一个指向 “A类的带有两个int型形参且返回值是int的成员函数” 的指针,指针名是P。


下面是代码:


#include
using namespace std;
class Base;
typedef int(Base::*p)();//定义成员函数指针类型
class Base
{
public:
? ? p virtual_p;//成员函数指针
? ? Base()
? ? {
? ? ? ? //初始化成员函数指针指向基类test
? ? ? ? virtual_p = (int(Base::*)())&Base::test;
? ? }
? ? ~Base(){}
? ? int test()//判断virtual_p的指向,如果指向派生类test就返回派生类的test调用
? ? {
? ? ? ? if (virtual_p == &Base::test)
? ? ? ? {
? ? ? ? ? ? cout << "Base" << endl;
? ? ? ? ? ? return 1;
? ? ? ? }
? ? ? ? else
? ? ? ? ? ? return (this->*virtual_p)();//返回派生类test调用,对virtual_p解引用后是test函数
? ? }
};
class Derived :public Base
{
public:
? ? Derived()
? ? {
? ? ? ? //初始化成员函数指针指向派生类test
? ? ? ? virtual_p = (int(Base::*)())&Derived::test;
? ? }
? ? ~Derived(){}
? ? int test()
? ? {
? ? ? ? cout << "Derived" << endl;
? ? ? ? return 2;
? ? }
};
int main()
{
? ? Base *b;//基类指针
? ? Derived d;//派生类对象
? ? Base bb;//基类对象
? ? //指向基类对象时调用基类test,指向派生类对象时调用派生类test,模拟了动态关联
? ? b = &d;
? ? cout << b->test() << endl;
? ? b = &bb;
? ? cout << b->test() << endl;
? ? return 0;
}


下面是运行结果:



】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
分享到: 
上一篇C# 内存法图像处理 下一篇Python中的编码与解码

评论

帐  号: 密码: (新用户注册)
验 证 码:
表  情:
内  容: