《深度探索C++对象模型》- 第4章 Function 语意学

深度探索C++对象模型》:member functions 阅读详情

这一遍看本书,总的说来收获并不大,也许是还没有遇到相关问题的缘故,另外也和最近的状态有关,有点浮躁。

看这一章有点看不下去的感觉了,没有什么新的收获,总结一下知识点吧。

1. Member Function共有3种:Nonstatic Member Function,Virtual Member Function,Static Member Function。

2. Static Member Function没有this指针,不能被声明为const、volatile或virtual。

3. object调用virtual function不会有多态产生。

4. C++中,多态表示“以一个public base class的指针或引用,寻址出一个derived class object”的意思。

5. 识别class是否支持多态,唯一的适当方法是看其是否有virtual function。

6. 建议,不要在一个virtual base class中声明nonstatic data members。

7. inline函数如果被调用太多的话,会产生大量扩展,程序大小会变大。

疑惑:

1. 有时说一个class只有一个virtual table,有时又说会有多个,当然多个的情况就是多继承和虚继承的情况。

virtual base class的问题 虚拟继承的实现机制 阅读详情

相关推荐

3.3 Data Member 的存取

已知如下的代码: Point3d origin; origin.x = 0.0; 对于x的存取的成本,视x和Point3d如何声明而定。x可能是个static member,也可能使个nonstatic member。Point3d可能是独立的(非派生)的class,也可能是从另一个单一的base class派生而来;甚至可能从多重继承或虚拟继承而来。 对于通过类对象和指针来存取x,也会有...

hallå的博客 355

《深入探索C++对象模型》第四Function语意学

1、Member的各种调用方式 在C++中,支持三种类型的member functions:static、nonstaticvirtual,每一种类型被调用的方式都不一样,下面我们分别来探讨一下: (1)Nonstatic C++要求非静态成员函数必须要和一般的非成员函数具有相同的效率。采取的措施是通过以下步骤将成员函数实例转换为对等的非成员函数实例: a.改写函数的原型(signatu

xufeilong520xu的专栏 473

4.2 Virtual Member Functions(虚拟成员函数)

一、两个基本概念我们已经讨论过virtual function的一般实现模型:每个class 有一个virtual table,内含该class中有作用的virtual function的地址,然后每一个object有一个vptr,指向virtual table的所在。在C++中,多态表示“以一个public base class的指针(或引用),寻址出一个derived class object

iFuMI的博客 922

深度探索C++对象模型4 Function语意学 4.1 Member的各种调用方式

Member的各种调用方式一、非静态成员函数二、虚拟成员函数三、静态成员函数四、名称的特殊处理(mangling机制) virtual函数是在20世纪80年代中期被加进来的,并且一开始受到了很多的之一 静态成员函数时最后被引入的一种函数类型。它们在1987年的Usenix C++研讨会的厂商研习营中被正式提议加入C++中 一、非静态成员函数 c++的设计准则之一是:非静态成员函数至少必须和一般的非成员函数有相同的效率 float magnitude3d(const Point3d *_this) {

沟沟沟的博客 345

[读书笔记] -深度探索C++对象模型》第4 Function语意学

1. Member的各种调用方式 C++支持三种类型的member functions: static、nonstaticvirtual,每一种类型被调用的方式都不相同。 1.1 Nonstatic Member Functions C++的设计准则之一就是:nonstatic member function至少必须和一般的nonmember function有相同的效率。下面是一个nonmember function的定义: float magnitude3d(const Point3d* _

浮生的博客 406

深度探索C++对象模型读书笔记】【第4Function语意学

1、 C++支持三种类型的member functions,static、nonstaticvirtual,每一种类型被调用的方式都不相同。 2、C++的设计准则之一便是nonstatic member function至少必须和一般的nonmember function有相同的效率。编译器内部会将member函数实例转换为对等的nonmember函数实例,转换步骤为: a)  改写函数

ruan875417的专栏 551

深度探索C++对象模型》学习笔记

深度探索C++对象模型》学习笔记 最近学习了c++对象模型,做下笔记,方便日后查阅 第一:关于对象 c++对象模型 在此模型中,成员变量被配置在每一个对象中,静态成员变量、成员函数和静态成员函数放置在对象之外,虚函数则以下两个步骤支持: 每个类产生一堆指向虚函数的指针放在表格之中,这个表格叫做虚函数表(vtal) 每个对象中被添加一个指针(vptr),指向相关的虚函数表,vptr的赋值和重置由每个类的构造函数、析构函数和拷贝赋值运算符自动完成。每个类所关联的type_info放在虚函数表的表头

QT练手小程序 459

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

下载地址:网盘下载内容简介······这本书探索“对象导向程序所支持的C++对象模型”下的程序行为。对于“对象导向性质之基础实现技术”以及“各种性质背后的隐含利益交换”提供一个清楚的认识。检验由程序变形所带来的效率冲击。提供丰富的程序范例、图片,以及对象导向观念和底层对象模型之间的效率测量。举报作者简介······Stanley B...

weixin_30301449的博客 1329

问答学习《深度探索C++对象模型》系列

经过数次翻看《深度探索C++对象模型》和翻看别人的笔记,还是决定自己动手写一下该本书的笔记。笔记采用问答的方式是因为在UC实习时我的指导老师的影响:你不要为了看书而看书,你要从中学到东西就要带着疑问去学习。于是有了这一系列的笔记,感谢我的指导老师让我明白:生命不息,学习不止。 第一:《深度探索C++对象模型》读书笔记之关于对象 第二:《深度探索C++对象模型》读书笔记之构造函数语意学

冰枫的随笔 1323

深度探索C++对象模型 4.Function语意学

C++支持三种类型的成员函数:static、nonstaticvirtual,每一种类型被调用的方式都不相同。 4.1 Member的各种调用方式 非静态成员函数 设计准则  C++的设计准则之一就是:非静态成员函数至少和一般的非成员函数有相同的效率。 成员函数转化为非成员函数 转化步骤 1.改写函数原型,安插this指针到成员函数中(this指针指向对象数据的首地址) //non-const nonstatic member函数的扩张过程 Point3d Point3d::magnitude(Poin

ziggy7的博客 232

深度探索C++对象模型--Function语意学

深入探索c++对象模型

isunn的专栏 688

深度探索C++对象模型》—Function语意学(The Semantics of Function

Function语意学(The Semantics of Function)Member的各种调用方式Nonstatic Member FunctionsC++的设计准则之一:nonstatic member function 至少必须和一般的nonmember function有相同的效率。编译器内部会将“member函数实体”转换为对等的“nonmember函数实体”://1. 改写函数签名,安

jiange_zh的博客 1212

C++深度探索C++对象模型Function语意学

一、Member的各种调用方式 1. Nonstatic Member Functions 首先给出nonstatic member function 和 nonmember function float magnitude3d( const Point *_this ) { ... } // nonmember function float Point3d::magnitude3d() c

小do在努力 698

深度探索C++对象模型 3Data语意学

第三 Data语意学 已知如下程序: #include using namespace std; class X{}; class Y: public virtual X{}; class Z: public virtual X{}; class A: public Y,public Z{};   int main(){     cout sizeof(X)

walkerkalr的专栏 1233

深度探索C++对象模型——4_Function语意学

深度探索C++对象模型

wogan101的博客 231

深度探索C++对象模型 Function语意学笔记

    为什么C++可以进行函数重载呢?因为C++对函数进行编译的时候,对函数进行了重命名。即函数名称+参数数目+参数类型=新的函数名称。    对于虚拟成员函数,如果normalize()是一个虚拟成员函数,则以下的调用:    ptr->normalize();    将会被内部转化为: ( *ptr->vptr[1] )( ptr ); //第二个ptr表示this指针。    类似的,如果magnitude()也是一个虚拟函数的话,它将被转换如下:    register float mag = m

caianye的专栏 1102

深度探索C++对象模型》chapter4Function语意学

目录1 Member的各种调用方式1.1 非静态成员函数1.2 虚拟成员函数1.3 静态成员函数2 虚拟成员函数2.1 单一继承下的虚函数2.2 多重继承下的虚函数2.3 虚拟继承下的虚函数3 指向成员函数的指针4 内联函数 1 Member的各种调用方式 1.1 非静态成员函数 C++的设计准则之一:nonstatic member function至少必须和一般的nonmember function有相同的效率。 //Point3d::magnitude() float Point3d::magnitu

weixin_42323999的博客 360
上一篇: 《深度探索C++对象模型》- 第3章 Data 语意学
下一篇: 面试题 - reinterpret_cast
Erorr
博客等级 码龄20年 90粉丝 144原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值