`
deepfuture
  • 浏览: 4337738 次
  • 性别: Icon_minigender_1
  • 来自: 湛江
博客专栏
073ec2a9-85b7-3ebf-a3bb-c6361e6c6f64
SQLite源码剖析
浏览量:79472
1591c4b8-62f1-3d3e-9551-25c77465da96
WIN32汇编语言学习应用...
浏览量:68485
F5390db6-59dd-338f-ba18-4e93943ff06a
神奇的perl
浏览量:101628
Dac44363-8a80-3836-99aa-f7b7780fa6e2
lucene等搜索引擎解析...
浏览量:281470
Ec49a563-4109-3c69-9c83-8f6d068ba113
深入lucene3.5源码...
浏览量:14632
9b99bfc2-19c2-3346-9100-7f8879c731ce
VB.NET并行与分布式编...
浏览量:65694
B1db2af3-06b3-35bb-ac08-59ff2d1324b4
silverlight 5...
浏览量:31367
4a56b548-ab3d-35af-a984-e0781d142c23
算法下午茶系列
浏览量:45283
社区版块
存档分类
最新评论

c++对象模型(多态1)

阅读更多

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++对象模型总结

    C++对象模型 第1章 关于对象 第2章 构造函数语意学 第3章 Data语意学 第4章 Function语意学 第5章 构造、析构、拷贝语意学 第6章 执行期语意学 第7章 站在对象模型的尖端 第8章 C++对象模型总结 8.1 C++对象模型 8.2...

    深度探索C++对象模型

    深度探索C++对象模型 第0章 导读(译者的话) 第1章 关于对象(Object Lessons) 加上封装后的布局成本(Layout Costs for Adding Encapsulation) 1.1 C++模式模式(The C++ Object Model) 简单对象模型(A Simple...

    深度探索C++对象模型 chm

    深度探索C++对象模型,内容概要:多态是一种威力强大的设计机制,允许你继承一个抽象的public接口之后,封装相关的类型,需要付出的代价就是额外的间接性--不论是在内存的获得,或是在类的决断上,C++通过class的pointer...

    深度探索模C++对象模型PDF

    C++对象模型(Th e C++ Object Model) 对象模型如何影响程序(How the Object Model Effects Programs) 1.2 关键词所带来的差异(A Keyword Distinction) 关键词的困扰 策略性正确的struct(The Politically ...

    C++对象内存模型.pdf

    C++对象内存模型.pdf

    深度探索C++对象模型 超清版

    C++对象模型(Th e C++ Object Model) 对象模型如何影响程序(How the Object Model Effects Programs) 1.2 关键词所带来的差异(A Keyword Distinction) 关键词的困扰 策略性正确的struct(The Politically ...

    《深度探索C++对象模型》(Stanley B·Lippman[美] 著,侯捷 译)

    本书重点:探索“对象导向程序所支持的C++对象模型”下的程序行为。对于“对象导向性质之基础实现技术”以及“各种性质背后的隐含利益交换”提供一个清楚的认识。检验由程序变形所带来的效率冲击。提供丰富的程序...

    C++对象模型

    C++模型之菱形虚拟继承中的内存分布

    C++虚拟多重继承对象模型讨论-样例

    仅仅是一个讨论使用的样例程序,详细内容参考:http://blog.csdn.net/magictong/article/details/22202393

    深度探索C ++ 对象模型,内容概要:多态是一种威力强大的设计机制,允许你继承一个抽象的public接口之后,封装相关的类型,需要付出的代价就是额外的间接性--不论是在内存的获得,或是在类的决断上,C++通过class的pointer和references来支持多态,这种程序风格就称为"面向对象"。

    深度探索C++对象模型,内容概要:多态是一种威力强大的设计机制,允许你继承一个抽象的public接口之后,封装相关的类型,需要付出的代价就是额外的间接性--不论是在内存的获得,或是在类的决断上,C++通过class的pointer...

    深度探索 c++对象模型 中文版

    C++的面向对象的特性。这根本不能叫C++程序。(我想有时间重写一下以前代码也会有很多收获,温故而知新吗)C和C++在编程思想上 是相互矛盾的。这也就是说如果你想学C++,完全可以不学C,只需要一本好书和一个不太笨...

    C++面向对象编程的一些总结

    C++面向对象编程的一些总结,包括了继承、多态、以及深入探索C++对象模型中文版及其读书笔记

    C++对象模型详解

    1.语言中直接支持面向对象程序设计的部分2.对于各种支持的底层实现机制语言中直接支持面向对象程序设计的部分,如构造函数、析构函数、虚函数、继承(单继承、多继承、虚继承)、多态等等,这也是组里其他同学之前...

    传智播客C++课件

    1.C语言与C++语言的区别与联系; 2.C++内存模型,命名空间和数据类型; 3.C++函数,引用,内联函数,函数模板,函数重载; 4.面向对象编程(OOP),类和对象; 5.构造器,拷贝构造,析构,new/delete; 6.运算符重载;面向...

    传智播客_C++基础课程讲义_v1.0.7

    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 ...

    多态机制.vsdx

    配合博客《C++对象模型探索 —— 继承关系下的虚函数手动调用》使用,原图文档。

    通过反汇编理解 C++语言实质探讨

    比如对象模型的构造、存储、数据与成员函数之间的联系,以及多态、继承、封装等,对其实质性技术觉得既抽象又具迷惑性。以 致在使用中连连碰壁,结果是不得已而求其次,纷纷转入使用其它可视化编程工具。 本文从...

Global site tag (gtag.js) - Google Analytics