C++如何通过函数地址调用函数

C++如何通过函数地址调用函数,第1张

简单说:在put函数的定义处,首先得有一个student的对象,然后通过对象调用input,调用时实参的个数,类型和input函数中的形参个数,类型都要一致。

具体解释:

c++的成员函数根据其调用的不同,大致可以分为4类:内联成员函数,静态成员函数,虚成员函数和上述3种以外的普通成员函数。从本质来说类成员函数和全局函数在调用上并没有差别,非内联函数的在调用时,基本上都包括如下的过程:函数的参数入栈,eip指针值入栈,然后跳到函数体的地址,执行函数体对应的代码,执行完毕调整栈帧。下面就按照上述4个分类进行分析,先来说一下普通的成员函数:

普通的成员函数在被调用时有两大特征:

1 普通的成员函数是静态绑定的,

2 普通的成员函数调用时编译器隐式传入this指针的值。

通过代码分析一下:

#include <iostream>

using namespace std;

class Test

{

public:

void Print(int i);

};

void Test::Print(int i)

{

cout<<i<<endl;

}

int main()

{

Test p=new Test();

p->Print(2);

system("pause");

}

上面Print函数符合上面所说4类的中的普通成员,所谓的静态绑定实质是c++源代码编译时,编编译器在p->Print();处翻译成直接调用Test类中Print()的汇编代码,也就是编译期编译器就确定了被调函数的相对地址。而所谓的动态绑定实质是,源码在编译的时候,编译器不是翻译成直接调用Test类中Print()的汇编代码,而是翻译成一个查找虚表,得到到函数的相对地址的过程。

大家都知道,我们在用Vue的时候经常要用到this,例如要在方法中访问data中的变量,例如要在调用定义在methods中的方法等等。但有时候你发现像往常一样简单的用thisxxx会报出this的undefined。这是因为在某些情况下,this并不是和普通情况下指当前组件。下面我来总结一下我用this时遇到的一些问题

在匿名函数中想使用this来调用data或methods中的变量,方法时,会报出thi为undefined。

那么怎么解决呢?

可以看到这里还是能获取这个匿名函数外层的变量的count=0,那么我们只要用一个变量把this引用起来就好

那如果我们不想定义一个引用变量,那该如何解决——我们可以用箭头函数

其实箭头函数这里的this是指外层函数的this,因为箭头函数是没有定义this,当在箭头函数内部用到this后会从他的父级作用域寻找。他父级就是query()函数,在这函数里使用this是指向当前组件的,所以这个直接在这函数里定义的箭头函数也是如此。

有些场景下我们会结合匿名函数和箭头函数,用this的时候就要非常小心了。

就像这次我在实现一个 轮询查询订单状态 的功能时就用了这样的结构:

轮询第一次的时候直接执行,一共轮询五次,随后的四次轮询采用setTimeOut三秒一次,可以看到这里实际上使用axios请求的方法是被定义在一个变量为f的匿名函数里,而axios的回调函数使用箭头函数写的。因此里就不能用this了,因为如果在这里用了this,实际上是匿名函数的this,也就是undefined了。所以一般把this是定义为匿名函数外层,然后在里面引用。

Javascript的this真的是复杂,不像Java那样明显,平时还是得多注意一下,这玩意真的就是空指针问题一样困扰Js开发者。

调用函数时this为window对象,可以alert(this==window)试试

但在严格模式下为undefined,js代码第一行写"use strict";开启严格模式

把函数设置为对象的一个方法,那么this就等于这个对象了

onclick="btnClick1()"还是普通的调用函数,改成onclick="btnClick1(this)",可以把对象传进去

或者把函数绑定给dom节点,inputonclick=btnClick1;这样this==input

this通常是指“这个对象”或者“当前对象”,而且它本身表示对当前对象的引用。

所以bsub(thisabc);这里面的thisabc指的是CLASS A中的abc

还有就是bsub(thisabc);这种代码不能写在外面要写在方法或者可执行程序块里面

比如

class A{

int abc;

B b = new B();

void method() {

bsub(thisabc);

}

}

一般你这样理解就是了this写在哪个类里面就表示哪个类的对象

2)如果是class A中的abc,那this不是代表当前的对象吗?这句是class B的对象b调用函数,this理应就是代表对象b,是这样吗?

你理解有点问题

class B{

int abc;

public void sub(int x)

{thisabc = 0;}

}

这里面的this才表示调用这个sub方法的对象

也就是说对于

bsub(thisabc);这句话

public void sub(int x)

{thisabc = 0;}方法里面的this才是b

以上就是关于C++如何通过函数地址调用函数全部的内容,包括:C++如何通过函数地址调用函数、Vue中匿名函数和箭头函数的this、JavaScript 函数中的this关键字等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/web/9634846.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-04-30
下一篇 2023-04-30

发表评论

登录后才能评论

评论列表(0条)

保存