C++语法补遗

只有代码:

ContractedBlock.gif ExpandedBlockStart.gif Code
#include <cstdlib>
#include 
<iostream>
 
using namespace std;
 
class A
{
       
public:
               A()
               {
                  cout 
<< "ctor" << endl;
                  
this->= 0;
               } 
               
int a;
               
virtual void print()
               {
                  cout
<< "print" <<endl;     
               };
               A(
const A &a)
               {
                  cout 
<< "copy" <<endl;
                  
this->= a.a;
               };
               A 
&A::operator = (const A& a)
               {
                  cout 
<< "=" <<endl;
                  
this->= a.a;
                  
return *this;      
               };
               A 
&A::operator + (const A& a)
               {
                  cout 
<< "+" <<endl;
                  
this->+= 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/wodehuajianrui/articles/1549156.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值