c++对象模型(多态1)
来源:互联网 发布:经济法和民商法 知乎 编辑:程序博客网 时间:2024/05/21 16:59
A a;
B b;//B类是A类的子类
a=b;//B的内容被A类对象进行裁剪,a仍然属于A类
a.func();//调用的是A的函数
必须用引用和指针,上述因为是在编译时就确定好了,所以调用的仍然是父类.
A &a=b;
a.func();//这样可以
对多态的支持
1、类型的隐含转化
circle作为shap的子类
shap *ps=new circle();
2、经由虚函数机制
ps->rotate();
3、dnnamic和typeid
if (circle *pc=dynamic_cast(ps))
多态接口的定义
通常定义在一个抽象的基类中的接口由虚函数支持。
可以程序执行期决定哪个类执行。
比如
func(
A a, const A *a1,const A&a2
)
{
a.func();//这句因是编译期决定的,所以永远是调用A类的函数,下面2句在下述程序中是调用B类的
(*a1).func();
(*a2.func);
}
main()
{B b;//B是A的子类
func(b,&b,b)
}
如此说来类对象要多少空间来表示呢
1、非静态数据成员的空间
2、为支持VIRTUAL而产生的如虚函数表及其指针等所需要的空间
3、由于成员存放的边界需要而产生的边界空间。
4、指针无论指向什么类型,其空间大小都是一样的,只是类型不同,其指向的地址所代表内容的长度不同而已
指向对象的指针
B b;//b是a的子类,且B比A多定义几个非静态成员
A*a=&b;//指针指向的空间仅包括A类对象的空间大小,不包括B类的几个非静态成员所在的空间,尽管
//已经指向了B类的空间,不能使用a来操作B类对象所特有的东东
B *bb=&b;//包括B类对象所占用的空间。
//以下方法可以使用B类对象的空间
((B*)a)->x;//x是B类的int型的数据成员
- 【c++】多态&多态对象模型
- Objective-C对象模型
- Objective-C对象模型
- objective C 对象模型
- C ++ 对象模型
- Objective-C 对象模型
- 【C++】对象模型
- Objective-C对象模型
- c++对象模型(多态1)
- C/C++的对象模型
- Objective-C的对象模型
- 图解Objectvie-C对象模型
- C/C++的对象模型
- C++_多态&多态的对象模型
- Objective-C对象模型--类对象和元类对象
- 多态&对象模型
- C++对象模型(1)
- C++对象模型1:
- Base 64
- 学习的好地方
- 为silverlight页面创建根页面BasePage
- 【Silverlight】Bing Maps学习系列(二):通过Bing Maps Silverlight Control如何显示地图
- mysql 图形管理工具
- c++对象模型(多态1)
- C语言网络编程基础1.2
- Java怎样中断一个运行中的线程
- 用Flex的编译参数实现AS3程序的自身预加载(Self Preloading)
- 理解 Thread.Sleep 函数
- C#全角和半角转换
- IsPostBack深入探讨
- C# 操作MySQL数据库的简单例子
- 开源的读取Excel文件组件-ExcelDataReader