静态型别和动态型别
来源:互联网 发布:网络管理书籍 编辑:程序博客网 时间:2024/04/29 21:23
静态型别和动态型别
概念
所谓静态型别,指的是变量声明的类型;而动态型别是变量实际指向的类型。
特性
- 静态型别静,一经确定再无更改;动态型别动,会根据实际指向而改变。
- 静态型别控制静态绑定,动态型别控制动态绑定。
例如:
class B;
class D:public B;
B * pB; //静态型别是B,动态型别未知
B b; //静态型别是B,动态型别是B
D * pD; //静态型别是D,动态型别未知
D d; //静态型别是D,动态型别是D
/* 至此,上面各变量的静态型别已经固定了,b和d的动态型别也固定了;而指针变量的动态型别可能变化。*/
pB = &b; //pB动态型别为B
pB = &d; //pB动态型别为D
pD = (D *)&b; //pD动态型别为B
pD = &d; //pD动态型别为D
b = d; //b的静态型别是B,动态型别是B
除了虚函数是动态绑定之外,其余的均为静态绑定(如:缺省参数<包括虚函数的缺省参数!>)。
测试用例
#include <iostream.h>class B{public: void f() { cout<<"Bf"<<endl; } virtual void v(char c='B') { cout<<"Bv-"<<c<<endl; }};class D:public B{public: void f()//error!这种做法叫做隐藏,不提倡! { cout<<"Df"<<endl; } virtual void v(char c='D')//error! 不允许重载缺省值,否则程序执行出乎意料,见输出结果 { cout<<"Dv-"<<c<<endl; }};void main(){ B b,*pB; D d,*pD; pB = &d; pB->f(); pB->v(); pD = (D *)&b; pD->f(); pD->v();}
输出如下:
Bf
Dv-B
Df
Bv-D
- 静态型别和动态型别
- Linux静态库和动态库区别
- Linux动态库和静态库区别
- Linux静态库和动态库区别
- Linux静态库和动态库区别
- 静态库和动态库区别
- Linux静态库和动态库区别
- Linux静态库和动态库区别及实例
- 静态链接库和动态链接库区别
- Linux静态库和动态库区别(1)
- iOS开发中静态库和动态库区别
- 动态链接库和静态链接库区别
- 静态库与动态库区别
- 静态库与动态库区别比较
- C++动态库于静态库区别
- C++静态库与动态库区别
- 关于value和reference型别
- STL中的型别
- 在Win2k下实现半透明窗口的两个步骤(修补稿1.2)
- 获取本机的第一个IP(常用例程:1)
- 附着关系的处理方案
- 如何在VC中使用DEBUG
- 让您制作的CHM类型帮助文件出现菜单
- 静态型别和动态型别
- HOWTO:访问成员函数指针?
- 在VC中使用ADO
- JavaBean入门
- JavaBean使用技巧
- Java数据库编程中查询结果的表格式输出
- 用JAVA程序取得IP地址
- 多线程技术在博奕程序中的应用
- Java线程控制的图像分割与合成