指向类成员的指针并非指针

from《C++ Common Knowledge》

#include <iostream>

using namespace std;

extern void fi(int);
extern void fl(long);
extern void fc(char);

class Foo
{
public:
    Foo(){};
    virtual ~Foo(){};
	static void do_foo(int i){
		cout<<"您好,您输入了i="<<i<<endl;
	}
	void to_str(){
		cout<<"a_:"<<a_<<",b_:"<<b_<<endl;
	}
	int get_ab(){
		return a_ + b_ ;
	}
	int b_;
	int a_;
	
};

int main()
{	
    typedef void (*PF)(int);
	PF pf1 = Foo::do_foo;
	pf1(123);
	cout<<hex<<pf1<<dec<<endl;
	
	int Foo:: * pimC;   //指向类Foo的int成员
    typedef int (Foo:: * PFAB)(void);
	PFAB pfab = &Foo::get_ab;    //指向类Foo的函数成员 get_ab
	
	Foo foo;
	Foo *pfoo = &foo;
	foo.a_ = 1;
	foo.b_ = 2;
	foo.to_str();

	pimC = &Foo::a_;        //指向类int成员的赋值
	
	cout<< pimC <<",int成员指针的内容:" << foo.*pimC
		<<",PFoo->int:" << pfoo->*pimC <<endl;
	foo.*pimC = 110;

	foo.to_str();
	cout<<pfab<<",get sum ab:"<<(foo.*pfab)()
		<<",指针:"<< ((pfoo->*pfab)()) <<endl;
	
	pimC = &Foo::b_;        //指向类int成员的赋值
	
	cout<< pimC << ",int成员指针的内容:" << foo.*pimC
		<<",PFoo->int:" << pfoo->*pimC <<endl;
	foo.*pimC = 220;
	foo.to_str();
	cout<<pfab<<",get sum ab:"<<(foo.*pfab)()
		<<",指针:"<< ((pfoo->*pfab)()) <<endl;
	
	/*
	typedef union{
		char ch;
		int i;
	} U;
	U u;
	u.i = 1;
	cout<<(int)u.ch<<endl;
	*/
	/*
	int  i = 10;
	void * pv1 = &i;
	cout<< *(int *)pv1<<endl;
	*/
	// PF pf2 = fl;
	// PF pf3 = fc;
	//    pf1(1);
    return 0;
}

  

原文链接: https://www.cnblogs.com/wucg/archive/2012/12/07/2807167.html

欢迎关注

微信关注下方公众号,第一时间获取干货硬货;公众号内回复【pdf】免费获取数百本计算机经典书籍

    指向类成员的指针并非指针

原创文章受到原创版权保护。转载请注明出处:https://www.ccppcoding.com/archives/71787

非原创文章文中已经注明原地址,如有侵权,联系删除

关注公众号【高性能架构探索】,第一时间获取最新文章

转载文章受原作者版权保护。转载请注明原作者出处!

(0)
上一篇 2023年2月9日 下午3:03
下一篇 2023年2月9日 下午3:03

相关推荐