美文网首页C++ 2a
C++中成员函数的声明与调用

C++中成员函数的声明与调用

作者: 左图右码 | 来源:发表于2022-06-13 10:47 被阅读0次

成员函数的语法有点让人困惑,记录在此。
如下的一个类,有两个成员函数,形参相同:

struct foo
{
    std::string msg{};
    foo(const char* msg) : msg(msg)
    {}
    void printInfo()const
    {
        cout << msg << endl;
    }
    void sayHello()const
    {
        cout << "hello" << endl;
    }
};

成员函数的声明:

typedef void(foo.myPF*)()const;
//or
using myPF = void(foo.*)()const;

调用:

void test()
{
    std::vector<foo> vec{"a","b","c","d"};
    using mem_funPtr = void(foo::*)()const;
    mem_funPtr mfp = &foo::printInfo;
    for_each(vec.begin(), vec.end(), std::bind(mfp,std::placeholders::_1));
    mfp = &foo::sayHello;
    foo bar("this is a test class.");
    (bar.*mfp)();
    mfp = &foo::printInfo;
    auto pBar = &bar;
    (pBar->*mfp)();
}

输出:

a
b
c
d
hello
this is a test class.

尤其在模版中,如果遇到如下的调用形式,就不会很奇怪了。
不用std::bind也可以调用成员函数了:

using myPF = void(foo::*)()const;
template<myPF PF>
void call(const foo& obj)
{
    (obj.*PF)();
}

void test()
{
    std::vector<foo> vec{"a","b","c","d"};
    for_each(vec.begin(), vec.end(), call<&foo::printInfo>);
}

相关文章

  • C++中成员函数的声明与调用

    成员函数的语法有点让人困惑,记录在此。如下的一个类,有两个成员函数,形参相同: 成员函数的声明: 调用: 输出: ...

  • 函数声明及其用法

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

  • Kotlin 函数

    函数声明 Kotlin 中的函数使用 fun 关键字声明: 函数用法 调用函数使用传统的方法: 调用成员函数使用点...

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

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

  • Kotlin定义函数

    函数函数声明 Kotlin 中的函数使用 fun 关键字声明: 函数用法 调用成员函数使用点表示法:

  • C++中的const成员函数(函数声明后加const)用法详解

    转载请注明出处,尊重智慧!文章来源: C++中的const成员函数(函数声明后加const,或称常量成员函数)用法...

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

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

  • 4.4C++纯虚函数和抽象类

    在C++中,可以将成员函数声明为纯虚函数,语法格式为: virtual 函数返回类型 函数名 (函数参数) = 0...

  • [初学C++]构造和析构函数

    什么是构造函数定义C++中的类可以定义与类名相同的特殊成员函数,这种与类名相同的成员函数叫做构造函数.C++对类提...

  • Kotlin:函数

    函数声明 函数入参,与返回值 函数调用 使用.调用 中缀符号 它们是成员函数或者是[扩展函数]只有一个参数 使用i...

网友评论

    本文标题:C++中成员函数的声明与调用

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