编程设计模式(C++)(1)
作者:互联网
模式设计原则:扩展隔离变化点,抽象稳定点
大部分的设计模式都依赖于多态,要实现多态则需要用到虚函数;
虚函数分为一般虚函数和纯虚函数,一般虚函数调用是可以运行函数体中的代码的,纯虚函数的代码定义如下:
virtual void f()=0;
如下代码
#include<iostream> using namespace std; class A { public: void print1() { cout << "A" << endl;; } virtual void print2() { cout << "A" << endl; } }; class B :public A{ public: void print1() { cout << "B" << endl; } virtual void print2() { cout << "B" << endl; } }; int main() { A*p; A*test1= new A(); B*test2 = new B(); p = test1; p->print1(); p->print2(); p = test2; p->print1(); p->print2(); system("pause"); return 0; }View Code
代码的输出结果如下
很显然,当p指向testB指向的对象时调用print1()方法时,所执行的为类A的print1方法,因为指针p在声明时就将print1方法名和类A中的print1方法进行了静态绑定。
静态绑定:在程序编译时就能将函数名和具体函数绑定
动态绑定:在程序编译时不能确定到具体的函数,因为虚函数的特性,需要在运行时才能确定具体调用哪个对象的函数。
当类被初始化时,类中的虚函数会被记录到一个虚函数表中,在多态中,当一个指针指向另一个类的对象时,虚函数表则会通过指向的这个类进行更新,在调用虚函数时就会调用指向的这个对象中的具体函数体。基类和派生类会共用一张虚函数表。
。。。
标签:print1,调用,函数,指向,编程设计,绑定,多态,模式,C++ 来源: https://www.cnblogs.com/tppp/p/15419629.html