类成员函数指针小结

成员函数指针分为静态成员函数指针和非静态成员函数指针

静态成员函数指针
静态成员函数指针与普通函数指针区别较小,基本等同于普通函数指针。
只需要在赋值时带上类名。

class Widget
{
public:
	static int StaticFunc();
};

using NormalFunc = int(*)();
NormalFunc pNormalFunc = &Widget::StaticFunc; // 赋值需要带上类名
(*pNormalFunc)();  // 和普通函数指针调用方式一样

非静态成员函数指针

非静态成员函数指针与普通函数指针区别较大。
定义需要带上类名。
赋值需要带上类名。
调用需要带上对象或者对象指针。

class Widget
{
public:
	int NormalFunc();
};

using MemberFunc = int(Widget::*)(); // 定义需要带上类名
MemberFunc pMemberFunc = &Widget::NormalFunc; // 赋值需要带上类名
Widget one;
(one.*pMemberFunc)(); // 调用需要对象
Widget* pSecond = new Widget; // 
(pSecond->pMemberFunc)(); // 调用需要对象指针

好处

使用成员函数指针,可以很方便地调用成员函数。对于静态成员函数,可以作为回调函数使用。

完整例子:

#include <iostream>
#include <string>

class TestClass
{
public:
	void NormalFunc1() { std::cout << "Normal Func1..." << std::endl; }
	void NormalFunc2() { std::cout << "Normal Func2..." << std::endl; }
	void NormalFunc3() { std::cout << "Normal Func3..." << std::endl; }
	static void StaticFunc() { std::cout << "Static Func..." << std::endl; }
};

using NormalFuncPtr = void(*)Normal();
using MemberFunPtr = void (TestClass::*)();

void RegisterFunc(FuncPtr pFunc)
{
	(*pFunc)();
}

int main()
{
	TestClass object;

	MemberFunPtr pMemberFunc;
	pMemberFunc = &TestClass::NormalFunc1;
	(object.*pMemberFunc)(); 
	pMemberFunc = &TestClass::NormalFunc2;
	(object.*pMemberFunc)(); 
	pMemberFunc = &TestClass::NormalFunc3;
	(object.*pMemberFunc)(); 

	NormalFuncPtr pStaticFunc;
	pStaticFunc = &TestClass::StaticFunc;
	(*pStaticFunc)(); 

	RegisterFunc(pStaticFunc);
	return 0;
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
在C++中,运算符重载和虚函数是两个重要的概念。运算符重载可以让我们自定义运算符的行为,虚函数则可以实现多态性,使派生能够覆盖基的同名函数。下面是对它们的实验小结: 1. 运算符重载 运算符重载是C++中的一个重要特性,可以让我们自定义运算符的操作。通过运算符重载,我们可以让自己定义的型支持各种运算符操作,比如加、减、乘、除等。 在实验中,我们定义了一个Rational,实现了加、减、乘、除四种运算符的重载。重载运算符的实现方式是在中定义相关的成员函数,函数名以“operator”开头,后跟要重载的运算符。 2. 虚函数 虚函数是C++中实现多态性的重要手段。通过虚函数,我们可以让派生覆盖基的同名函数,从而实现多态性。在实验中,我们定义了一个Shape基和两个派生,分别是Rectangle和Circle。它们都实现了一个名为area()的函数。 在Shape中,我们将area()函数定义为虚函数。这样,在Rectangle和Circle中,我们可以覆盖基的area()函数,实现自己的计算面积的方法。同时,我们还定义了一个指向Shape对象的指针数组,通过该数组,我们可以对不同的对象调用同名的虚函数,从而实现多态性。 通过本次实验,我们深入了解了运算符重载和虚函数的实现方式和使用方法。这些概念在C++中非常重要,掌握它们可以让我们更好地理解和使用C++语言。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值