C++对象模型之函数成员(1)

原创 2004年01月27日 21:09:00

第三章 函数成员

1.1.   成员函数的三种调用方式

1.1.1. 非静态成员函数

非静态成员函数的效率和非成员函数相同,也就是说

float magnitude(const Point3d * _this) {…};

float Point3d::magnitude() const {…};

的效率相同。

成员函数的转化步骤如下(编译器所做的工作):

l          改写函数原型<?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" />

//非静态成员函数

Point3d::magnitude(Point3d * const this);

//常量非静态成员函数

Point3d::magnitude(const Point3d * const this);

l          对非静态数据成员的存取改由this指针完成

{this->xxxxx}

l          把成员函数改写为一个外部函数,对函数名称进行处理,使它在程序中独一无二

1.1.2. 虚成员函数

l          通过指针调用

Point3d *ptr;

……

ptr->normalize();

在内部将被转化成为(*ptr->vptr[1])(ptr);

l          通过对象调用

Point3d obj;

Obj.normalize();

由于编译器可以确定调用的肯定是Point3d::normalize(),因此在内部这样的调用将被转化为:

normalize_7Point3dEv(&Obj);//经过编码的函数名称,在整个程序中保持唯一性。

1.1.3. 静态成员函数

Point3d *ptr;

……

Point3d obj;

ptr->normalize();

Obj.normalize();

在内部都将被转化为normalize_7Point3dEv();

静态成员函数的主要特征是没有this指针,其次要特征为

1.   不能够直接存取Class中的非静态成员

2.   不能被声明为const、volatile或vitrual

不用经过Class Object才能够调用

深入探索C++对象模型之指向成员函数的指针

#include using namespace std; class A{ public: virtual int f(int a){ cout
  • gettogetto
  • gettogetto
  • 2016年10月17日 21:33
  • 158

C++成员函数返回对象的引用

在C++类的成员函数中,包含了一个隐含的this指针。一般情况下,并不会显示地使用this指针,即通过”this->XXX“来使用类的成员。但是在成员函数返回对该调用函数的对象的引用时,会显示的使用t...
  • tom555cat
  • tom555cat
  • 2014年03月08日 15:54
  • 1431

c++类的成员函数存储方式(是否属于类的对象)---一道面试题引发的思考

c++类的成员函数存储方式(是否属于类的对象)
  • richerg85
  • richerg85
  • 2014年02月20日 10:23
  • 6206

【C++面向对象】类的静态成员函数(static member functions)

一、静态成员函数的引入 在引入静态成员函数之前,C++语言要求所有的成员函数都必须经由该类的对象来调用。而实际上,只有当成员函数中有存取非静态数据成员时才需要类对象。类对象提供this指针给...
  • xiajun07061225
  • xiajun07061225
  • 2013年04月10日 15:13
  • 2425

C++类对象成员变量和成员函数内存分配的问题

(转载自:http://blog.sina.com.cn/s/blog_4feac7b90101keet.html) 很多人都知道C++类是由结构体发展得来的,所以他们的成员变量(C语言的结构体只有...
  • njustzj001
  • njustzj001
  • 2015年01月12日 20:26
  • 2805

C++类的成员函数存储方式(是否属于类的对象)

今天在看TAF源码的时候,发现下面一段有趣的代码:getSmallerProxyPrx = Application::getCommunicator()->stringToProxy(MobileA...
  • jiange_zh
  • jiange_zh
  • 2016年07月10日 15:42
  • 2268

C++ 引用对象成员的三种方式

在程序中经常需要访问对象中的成员。访问对象中的成员可以有3种方法: 1.通过对象名和成员运算符访问对象中的成员; 2.通过指向对象的指针访问对象中的成员; 3.通过对象的引用变量访问对象中...
  • l198738655
  • l198738655
  • 2016年12月12日 12:06
  • 723

C++为什么要引入静态成员函数

在静态成员函数出来之前就已经有了静态成员变量。静态成员变量是为了为用户提供在类级别上访问,而不是类对象有关的数据。静态成员变量在编译期就存在了,而不像非静态成员变量只有实例化了对象才会给分配内存。静态...
  • lyh__521
  • lyh__521
  • 2016年03月14日 14:39
  • 870

C++类对象成员变量与成员函数内存分配问题

很多人都知道C++类是由结构体发展得来的,所以他们的成员变量(C语言的结构体只有成员变量)的内存分配机制是一样的。下面我们以类来说明问题,如果类的问题通了,结构体也也就没问题啦。 类分为成员变量和成员...
  • lfdanding
  • lfdanding
  • 2015年04月06日 11:59
  • 985

C++ 引用对象成员的三种方式

在程序中经常需要访问对象中的成员。访问对象中的成员可以有3种方法: 1.通过对象名和成员运算符访问对象中的成员; 2.通过指向对象的指针访问对象中的成员; 3.通过对象的引用变量访问对象中的成员...
  • oqqQuZi1234567
  • oqqQuZi1234567
  • 2014年12月11日 10:13
  • 1965
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:C++对象模型之函数成员(1)
举报原因:
原因补充:

(最多只允许输入30个字)