标签:style blog http color io os 使用 ar for
转载自 http://xiaochongzhang.me/blog/?p=283;
动态类型和静态类型
静态类型:静态类型是我们可以通过源代码就能确定的类型,而不用管运行时的类型,比如 int a = 1;我们知道a 的类型是int型。
动态类型:动态类型的实际类型是代码在运行时才知道其类型,例如有一个基类A和其派生类B,如果有个类型为A指向派生类B的指针;
A* bPtr = new B();从这里我们可以看出bPtr的静态类型为A;bPtr 的动态类型是B,也就是,当代码运行时A的实际类型是B。
我们使用基类的指针或引用实现动态类型是由于能够使用地址进行动态绑定。
静态绑定: 在程序编译程序时完成;通过对象调用方法。
动态绑定:在程序运行时绑定;通过地址调用方法。
例子:
////////////////////////////////////////////////////////////////// //Dynamic_Binding.h: this class demos the dynamic binding of // //C++ Base class and Derived class. // //Language: Visual Studio 2013 C++ // //Platform: Windows 8.1 // //Author: Xiaochong Zhang, Syracuse University // ////////////////////////////////////////////////////////////////// #include "stdafx.h" #include<iostream> using namespace std; //this is the base class class Base { public: void print(); virtual void HelloWorld(); }; //this is the derived class class Derived :public Base { public: void print(); virtual void HelloWorld(); };
#include "DynamicBind.h" void Base::print() { cout << "Print from Base class" << endl; } void Base::HelloWorld() { cout << "Hello World from Base class" << endl; } void Derived::print() { cout << "Print from Derived class" << endl; } void Derived::HelloWorld() { cout << "Hello World from Derived class" << endl; }
Test case:
void main() { cout << "===============Demo Dynamic Binding===============" << endl; cout << endl; Base* bPtr = new Derived(); // dynamic type is derived type, static type is base type bPtr->print(); bPtr->HelloWorld(); cout << endl; cout << "===============Finishing Demo===============" << endl; system("pause"); }
Output:
标签:style blog http color io os 使用 ar for
原文地址:http://www.cnblogs.com/lycsky/p/4029274.html