只有代码:
![](https://www.cnblogs.com/Images/OutliningIndicators/ContractedBlock.gif)
Code
#include <cstdlib>
#include <iostream>
using namespace std;
class A
{
public:
A()
{
cout << "ctor" << endl;
this->a = 0;
}
int a;
virtual void print()
{
cout<< "print" <<endl;
};
A(const A &a)
{
cout << "copy" <<endl;
this->a = a.a;
};
A &A::operator = (const A& a)
{
cout << "=" <<endl;
this->a = a.a;
return *this;
};
A &A::operator + (const A& a)
{
cout << "+" <<endl;
this->a += a.a;
return *this;
};
A &A::operator += (const A& a)
{
cout << "+=" <<endl;
this->a+=a.a;
return *this;
};
A &A::operator ++(int i)
{
cout<< "after ++" <<endl;
this->a++;
return *this;
}
A &A::operator ++()
{
cout<< "before ++"<<endl;
++this->a;
return *this;
};
friend inline ostream & operator << (ostream & os, A &a)
{
cout << a.a;
return os;
};
friend inline istream & operator >> (istream & is, A &a)
{
cin >> a.a;
return is;
};
};
typedef void (*function)(void);
typedef void (A::*myFunc)(void);
void Func(A* a)
{
*a++;
};
int main(int argc, char *argv[])
{
A* ptr = new A();//ctor
function* func = (function*)*((int*)ptr);//virtual function table
(*func)();//function pointer
myFunc fun = &A::print; //get the member of a class
(ptr->*fun)(); //call the function with pointer
A a0 = *ptr; //copy
A a1 = *(&a0); //copy
A a2; //ctor
a1 = a2; //=
A a3 = a1;//copy
A a4 = a1 + a2;// + and =
a4 += a1; //+=
Func(&(++a4));//before ++
Func(&(a4++));//after ++
cout << a4 <<endl; //<<
system("PAUSE");
return EXIT_SUCCESS;
}
虚函数表那个其实是扯淡的,RTTI用于类似反射的机制只能做到这么多,ISO不让把一个成员方法作为函数指针使用,就没什么好办法了。
![](https://www.cnblogs.com/Images/OutliningIndicators/ContractedBlock.gif)
![](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedBlockStart.gif)
#include <cstdlib>
#include <iostream>
using namespace std;
class A
{
public:
A()
{
cout << "ctor" << endl;
this->a = 0;
}
int a;
virtual void print()
{
cout<< "print" <<endl;
};
A(const A &a)
{
cout << "copy" <<endl;
this->a = a.a;
};
A &A::operator = (const A& a)
{
cout << "=" <<endl;
this->a = a.a;
return *this;
};
A &A::operator + (const A& a)
{
cout << "+" <<endl;
this->a += a.a;
return *this;
};
A &A::operator += (const A& a)
{
cout << "+=" <<endl;
this->a+=a.a;
return *this;
};
A &A::operator ++(int i)
{
cout<< "after ++" <<endl;
this->a++;
return *this;
}
A &A::operator ++()
{
cout<< "before ++"<<endl;
++this->a;
return *this;
};
friend inline ostream & operator << (ostream & os, A &a)
{
cout << a.a;
return os;
};
friend inline istream & operator >> (istream & is, A &a)
{
cin >> a.a;
return is;
};
};
typedef void (*function)(void);
typedef void (A::*myFunc)(void);
void Func(A* a)
{
*a++;
};
int main(int argc, char *argv[])
{
A* ptr = new A();//ctor
function* func = (function*)*((int*)ptr);//virtual function table
(*func)();//function pointer
myFunc fun = &A::print; //get the member of a class
(ptr->*fun)(); //call the function with pointer
A a0 = *ptr; //copy
A a1 = *(&a0); //copy
A a2; //ctor
a1 = a2; //=
A a3 = a1;//copy
A a4 = a1 + a2;// + and =
a4 += a1; //+=
Func(&(++a4));//before ++
Func(&(a4++));//after ++
cout << a4 <<endl; //<<
system("PAUSE");
return EXIT_SUCCESS;
}
---------------------------------------------------------------
缥缈落花街 月圆月缺 望峦山平川 雁返君未还 怆然晚春残 忆天上人间
缥缈落花街 月圆月缺 望峦山平川 雁返君未还 怆然晚春残 忆天上人间