不使用virtual关键字实现C++多态
2017-08-24 10:05
274 查看
#include <iostream> using namespace std; /* 不使用virtual实现多态可以用成员函数指针完成。 成员函数指针形式:返回类型(A::*指针名)(形参表) 其中A是类类型,即这个指针是指向A类的成员函数的函数指针 例如:int(A::*P)(int,int)这是一个指向 “A类的带有两个int型形参且返回值是int的成员函数” 的指针,指针名是P。 */ class Base; // 定义成员函数指针类型 typedef int(Base::*p)();// 这是一个指向 A类的不带形参且返回值为int的成员函数的指针,指针名为p class Base { public: p virtual_p;// 成员函数指针 Base() { virtual_p = &Base::test;// 初始化,指向基类test } ~Base() {} int test() { if (virtual_p == &Base::test) { cout << "Base::test" << endl; return 1; } else { return (this->*virtual_p)();//调用派生类成员函数 *virtual_p为test函数 } } }; class Derived : public Base { public: Derived() { virtual_p = (int(Base::*)())&Derived::test;// 初始化,指向派生类test } ~Derived() {} int test() { cout << "Derived::test" << endl; return 2; } }; void main() { Base* b; Base bb; Derived d; b = &d;//模拟动态绑定 b->test();// Derived::test b = &bb;// 静态绑定 b->test();// Base::test cin.get(); }
参考:http://www.cnblogs.com/zjc0202/p/4398204.html
相关文章推荐
- C++ 中的Virtual关键字与多态
- 如何:使用 C++ 实现 C# 的 is 和 as 关键字
- c++重载操作符的使用及实现编译多态
- virtual关键字及多态的实现
- C++动态绑定和模板的简单配合使用(virtual关键字)
- C#多态;父类引用指向子类对象;new和override的区别;new、abstract、virtual、override,sealed关键字区别和使用代码示例;c#类的初始化顺序
- C++的多态性只能通过virtual关键字实现
- C++父类定义虚函数其派生类的同名函数使用virtual关键字吗?
- C++ 类的多态一(virtual关键字--构造函数深刻理解)
- C++使用虚函数的时候,子类也要使用virtual关键字吗
- C++中使用多态的代价
- 使用c++实现事件注册
- C++对象布局及多态实现探索之内存布局
- [语音合成技术第四讲]使用C++实现语音识别
- C++多态技术的实现和反思
- C++对象布局及多态实现探索之虚函数调用
- 可变参数的使用(C++和C#实现)
- c++ 如何实现多态
- C++对象布局及多态实现探索之内存布局
- 用C实现C++的多态---剖析GTK的"对象" (四)