静态成员函数调用方式--收藏帖子
原帖子地址:https://bbs.csdn.net/topics/390750229
静态成员函数调用方式
A:: s_fun();//不需要额外传递一个参数,作为this 指针;因为静态函数,属于类,不属于具体对象。
非静态成员函数调用方式 。
非静态成员函数,属于对象,需要隐式传递 this 指针作为参数。
A a;
A &ref=a;
A *ptr = &a;
int main(){
a.fun(); // 1)对象; 传递&a, 即a 的地址作为 fun的 this 指针;
ref.fun(); // 2)引用;传递&ref,也即&a 即a 的地址作为 fun的 this 指针;
ptr->fun(); // 3)指针; 传递 ptr ,也即&a 即a 的地址作为 fun的 this 指针;
return 0;
}
静态成员函数,可以调用非静态成员函数,反之非静态成员函数也可以调用静态成员函数;
在静态成员函数,内部调用非静态成员函数,需要一个额外的对象,这个对象可以是任何可见的,可以访问的全局变量,静态变量(对象,引用,指针对应的对象)
也可以是静态成员函数的参数(通过对象,引用,指针),以及静态函数内部定义的局部变量。
非静态成员函数,可以直接调用静态成员函数。
非静态函数,可以隐式的通过this指针,调用除了构造析构构函数之外的,任何非静态成员函数。
也可以显示的通过this指针,调用除了构造析构构函数之外的,任何非静态成员函数。
可以调用构造函数,构造本类的其他对象。
也可以自动调用析构函数,析构本类的其他对象。
有时候甚至可以显式调用析构函数,析构某些对象。
例如:
a::fun_ather(){}
a:: fun(){
fun_ather(); //隐式的通过this指针,调用其他非静态成员函数,这是下面式子的省略写法。
this-> fun_ather();//显示的通过this指针,调用其他非静态成员函数。
}
this 指针,是对象调用函数的时候,隐式传递的。因为形参表,以及实参表里面都没有直接使用this 这个参数;
所以他是隐式的自动传递的;
方式很简单,就是 a.fun(),r.fun(), ptr->fun() ,这种写法的前面那个数据中,对象的地址传递给 this。
编译器安排某种方法,传递这个参数;
例如:VC6~VC10,32Bits 采用ecx 寄存器传递this 指针。
PS:
估计,要么是你只看到书中内容的一个片段;
要么是编者,并不是很理解C++静态成员函数,非静态成员函数;
静态成员函数,可以非静态成员函数;反之亦然;
只是调用方式有所不同。
1)类外函数调用成员函数
1.1)其他函数调用成员函数,调用静态成员函数,需要通过类名调用;A:: s_fun();
1.2)其他函数调用成员函数,调用非静态成员函数,通过对象调用; a.fun();r.fun();ptr->fun() ;
2)成员函数的互相调用:
2.1静态成员函数调用静态成员函数,直接用函数名 s_fun();
2.2) 非静态成员函数调用静态成员函数,直接用函数名 s_fun();
2.3非静态成员函数调用非静态成员函数,也可以直接用函数名,fun() ;这是通过this指针来调用的。
2.4)静态调用非静态,由于调用静态函数的代码,没有传递对象相关参数this指针,需要通过其他可以访问的对象来调用。
a.fun();r.fun();ptr->fun() ;
作为以上所有总结,可以看下面的例子
class A
{
int x;
static A a;
public:
void fun(){};
void fun_other(){};
static void s_fun();
static void s_fun(A & ref);
};
A A::a;
A a0;
void A::s_fun()
{
a.fun();
a0.fun();
s_fun(a);
s_fun(a0);
};
void A::s_fun(A & ref)
{
ref.fun();
a.fun();
a0.fun();
}
int main()
{
A:;s_fun();
return 0;
}
静态成员函数调用方式--收藏帖子相关推荐
- C++函数调用方式(_stdcall, _pascal, _cdecl...)总结 收藏
C++函数调用方式(_stdcall, _pascal, _cdecl...)总结 收藏 __stdcall: _stdcall 调用约定相当于16位动态库中经常使用的PASCAL调用约定.在32位的 ...
- JavaScript中七种函数调用方式及对应 this 的含义
http://blog.sina.com.cn/s/blog_621f1e120100rj21.html this 在 JavaScript 开发中占有相当重要的地位,不过很多人对this这个东西都感 ...
- php回调函数如何执行顺序,PHP回调函数调用方式
//PHP回调函数调用方式 // 类MyClass class MyClass { //静态方法 public static function myCallbackMethod() { echo &q ...
- 字节对齐和C/C++函数调用方式学习总结(多篇节选)
字节对齐和C/C++函数调用方式学习总结 created: 04-06-17 last saved: author: ayixidelu 前言: <***软件编程规范>中提到:" ...
- _cdecl、_stdcall 、_fastcall、_thiscall 函数调用方式与区别
几种函数调用方式 __cdecl 是C DECLaration的缩写(declaration,声明),表示C语言默认的函数调用方法:所有参数从右到左依次入栈,这些参数由调用者清除,称为手动清栈.被调用 ...
- 用python的五种方式_Python加载数据的5种不同方式(收藏)
数据是数据科学家的基础,因此了解许多加载数据进行分析的方法至关重要.在这里,我们将介绍五种Python数据输入技术,并提供代码示例供您参考. 作为初学者,您可能只知道一种使用p andas.read_ ...
- C语言试题八十一之利用递归函数调用方式,将所输入的5个字符,相反顺序打印
1.题目 利用递归函数调用方式,将所输入的5个字符,相反顺序打印 2 .温馨提示 C语言试题汇总里可用于计算机二级C语言笔试.机试.研究生复试中C程序设计科目.帮助C语言学者打好程序基础.C语言基础, ...
- python数据加载常规教程_Python加载数据的5种不同方式(收藏)
数据是数据科学家的基础,因此了解许多加载数据进行分析的方法至关重要.在这里,我们将介绍五种Python数据输入技术,并提供代码示例供您参考. 作为初学者,您可能只知道一种使用p andas.read_ ...
- 函数调用方式以及this指向
函数调用方式以及this指向 普通函数:fn(); function fn(){console.log( '普通函数:'+ this);}fn();//普通函数:window 对象的方法 var ob ...
最新文章
- 武汉第二中学2021年高考成绩查询,武汉中学排名前十名,2021年武汉中学排名一览表...
- pta7-3 统计不及格人数_编写程序,统计学生的成绩信息
- Robot Perception for Indoor Navigation《室内导航中的机器人感知》
- 洛谷P1462 通往奥格瑞玛的道路 二分答案+最短路SPFA
- python重定向_在Python中使用urlopen()防止“隐藏”重定向
- array函数参数 scala_scala – 在Spark SQL中将数组作为UDF参数传递
- 安卓模拟器不能上网时可尝试更改成谷歌DNS
- for mew歌词 shell_求shell for mew的中文歌词
- python和java选择哪个-python和Java选择哪一个?
- java+jdk+1.6.0+45+64_jdk1.6.0_45.tar.gz
- 分辨率_电视分辨率多少合适
- MATLAB-梯度Roberts算子、拉普拉斯算子、Sobel算子、Prewitt算子对图像进行锐化
- 【C语言】筛选法求素数
- WinCC数据报表控件
- html字体白色边框黑色效果,css完整总结:第二篇(尺寸,外补白,内补白,边框,背景,颜色,字体,文本,文本装饰)...
- 吴伯凡-认知方法论-真真切切的感觉
- js两数相乘出现多小数
- Linux 笔记本电脑选购指南
- 管理好公司固定资产需要做什么?资产管理一步到位
- feign POST请求报错 too many bytes written