美文网首页
普通成员函数的调用

普通成员函数的调用

作者: 404Not_Found | 来源:发表于2021-09-02 08:44 被阅读0次
  • 作者: 雪山肥鱼
  • 时间:20210903 07:47
  • 目的: 普通成员函数的调用
using namespace std;
class MYACLS
{
public:
    int m_i;
    void myfunc(int abc)
    {
        m_i += abc;
    }
};

void gmyfunc(MYACLS *ptmp,int abc)
{
    ptmp->m_i += abc;
}

int main()
{   

    MYACLS myacls;
    myacls.myfunc(18); //调用成员函数

    gmyfunc(&myacls, 18); //调用全局函数

    printf("MYACLS::myfunc的地址=%p\n", &MYACLS::myfunc);

    return 1;
}

普通成员函数的调用不应该比全局函数调用效率差
编译器内部实际上是堆成员函数 myfunc()的调用,转换成了对全局函数的调用。这里的全局我的理解是,跟着类走,而不是跟着函数走。
成员函数有独立的内存地址,跟着雷走,并且成员函数的地址在编译的时候就是确定好的。

  • 编译器会给成员函数增加一个this指针的形参,指向其生成对象。
void myfunc(int abc)
{
    m_i += abc;
}

void _ZN6MYACLS6myfuncEi(MYACLS *const this, int abc) 
{
  this->m_i += abc;
}

注意 this 的类型:MYACLS * const this, this 本身的值不会改变。

相关文章

  • C++11可调用对象包装器和绑定器

    可调用对象 在C++中,可以像函数一样调用的有:普通函数、类的静态成员、仿函数、lambda函数、类的成员函数、可...

  • C++对象模型4——函数的调用

    普通成员函数的调用 C++的设计准则之一就是:普通成员函数的调用至少和全局函数有相同的效率。而事实上,C++编译器...

  • const函数

    const A *a = new A();a->getText(); a不能调用普通成员函数只能调用const修...

  • 函数声明及其用法

    函数声明: 例子:声明一个函数 传统方法调用函数: 调用成员函数: 注意:成员函数调用通过点表示法 函数参数: 具...

  • 深入介绍信号和槽

    1.槽和普通的C++成员函数差不多——虚函数|重载|public|private|被其他函数调用|参数是任意的。唯...

  • 回调函数

    普通函数与回调函数主要是在调用方式上有区别: 1、对普通函数的调用:调用程序发出对普通函数的调用后,程序执行立即转...

  • 多态--绑定

    关键词:定义指向子类的基类指针绑定:将函数调用跟它的地址关联起来的过程。 对于普通的成员和成员函数,指向子类的基类...

  • Kotlin继承与多态 (1)继承

    调用父类构造函数使用主构造函数使用此构造函数重载使用参数默认值调用构造函数重写成员属性和函数重写成员属性重写成员函...

  • ★ 回调函数、闭包

    普通函数和回调函数有什么区别? 什么是闭包? 普通函数和回调函数主要是在调用方式上的区别: 普通函数的调用:调用程...

  • js中的一些基础语法整理

    this 指向 普通函数 普通函数谁调用,函数中this就指向谁,teacher调用getName,getName...

网友评论

      本文标题:普通成员函数的调用

      本文链接:https://www.haomeiwen.com/subject/vmvhwltx.html