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++对象模型 第1章 关于对象 第2章 构造函数语意学 第3章 Data语意学 第4章 Function语意学 第5章 构造、析构、拷贝语意学 第6章 执行期语意学 第7章 站在对象模型的尖端 第8章 C++对象模型总结 8.1 C++对象模型 8.2...
深度探索C++对象模型 第0章 导读(译者的话) 第1章 关于对象(Object Lessons) 加上封装后的布局成本(Layout Costs for Adding Encapsulation) 1.1 C++模式模式(The C++ Object Model) 简单对象模型(A Simple...
深度探索C++对象模型,内容概要:多态是一种威力强大的设计机制,允许你继承一个抽象的public接口之后,封装相关的类型,需要付出的代价就是额外的间接性--不论是在内存的获得,或是在类的决断上,C++通过class的pointer...
C++对象模型(Th e C++ Object Model) 对象模型如何影响程序(How the Object Model Effects Programs) 1.2 关键词所带来的差异(A Keyword Distinction) 关键词的困扰 策略性正确的struct(The Politically ...
C++对象内存模型.pdf
C++对象模型(Th e C++ Object Model) 对象模型如何影响程序(How the Object Model Effects Programs) 1.2 关键词所带来的差异(A Keyword Distinction) 关键词的困扰 策略性正确的struct(The Politically ...
本书重点:探索“对象导向程序所支持的C++对象模型”下的程序行为。对于“对象导向性质之基础实现技术”以及“各种性质背后的隐含利益交换”提供一个清楚的认识。检验由程序变形所带来的效率冲击。提供丰富的程序...
C++模型之菱形虚拟继承中的内存分布
仅仅是一个讨论使用的样例程序,详细内容参考:http://blog.csdn.net/magictong/article/details/22202393
深度探索C++对象模型,内容概要:多态是一种威力强大的设计机制,允许你继承一个抽象的public接口之后,封装相关的类型,需要付出的代价就是额外的间接性--不论是在内存的获得,或是在类的决断上,C++通过class的pointer...
C++的面向对象的特性。这根本不能叫C++程序。(我想有时间重写一下以前代码也会有很多收获,温故而知新吗)C和C++在编程思想上 是相互矛盾的。这也就是说如果你想学C++,完全可以不学C,只需要一本好书和一个不太笨...
C++面向对象编程的一些总结,包括了继承、多态、以及深入探索C++对象模型中文版及其读书笔记
1.语言中直接支持面向对象程序设计的部分2.对于各种支持的底层实现机制语言中直接支持面向对象程序设计的部分,如构造函数、析构函数、虚函数、继承(单继承、多继承、虚继承)、多态等等,这也是组里其他同学之前...
1.C语言与C++语言的区别与联系; 2.C++内存模型,命名空间和数据类型; 3.C++函数,引用,内联函数,函数模板,函数重载; 4.面向对象编程(OOP),类和对象; 5.构造器,拷贝构造,析构,new/delete; 6.运算符重载;面向...
5 C++面向对象模型初探 6 5.1基础知识 6 5.2编译器对属性和方法的处理机制 6 5.3总结 6 5.4 this指针 6 5.5全局函数PK成员函数 6 6 6友元 6 6.1友元函数 6 6.2友元类 6 7强化训练 6 1 static关键字强化训练题 6 2 ...
配合博客《C++对象模型探索 —— 继承关系下的虚函数手动调用》使用,原图文档。
比如对象模型的构造、存储、数据与成员函数之间的联系,以及多态、继承、封装等,对其实质性技术觉得既抽象又具迷惑性。以 致在使用中连连碰壁,结果是不得已而求其次,纷纷转入使用其它可视化编程工具。 本文从...