65,178
社区成员




#include <iostream>
#include <cstdlib>
class CBase
{
public:
int a;
int b;
int c;
int d;
int e;
virtual void fa(){std::cout<<"base fa"<<std::endl;}
virtual void fb(){std::cout<<"base fb"<<std::endl;}
};
class CBase2
{
public:
int a;
int b;
int c;
int d;
int e;
virtual void f2a(){std::cout<<"base2 fa"<<std::endl;}
virtual void f2b(){std::cout<<"base2 fb"<<std::endl;}
};
class CInh:public CBase,public CBase2
{
public:
virtual void fa(){std::cout<<"inh fa"<<std::endl;}
virtual void fb(){std::cout<<"inh fb"<<std::endl;}
virtual void f2a()
{
std::cout<<"inh f2a"<<std::endl;
CInh *p=this;
}
//virtual void f2b(){std::cout<<"inh f2b"<<std::endl;}
virtual void fia(){};
int a;
};
int main()
{
typedef void (CInh::* pf_t)(void);
std::cout<<sizeof(pf_t)<<std::endl;//输出8
pf_t pft=&CInh::fia;
int n=5;
int *pn=&n;
void *pv=pn;
pf_t *ppp=(pf_t *)pv;
typedef void (CBase2::* func_t)(void);
std::cout<<sizeof(func_t)<<std::endl;
CInh *a=new CInh;
a->f2a();
func_t pf=&CBase2::f2b;
(a->*pf)();
std::cout<<&a<<std::endl;
std::cout<<(CBase *)(&a)<<std::endl;
std::cout<<(CBase2 *)(&a)<<std::endl;
std::cout<<(CInh *)(CBase2 *)(&a)<<std::endl;
CBase2 *p=a;
p->f2a();
std::system("pause");
return 0;
}
#include <stdio.h>
#include <stdlib.h>
typedef void (*Function1)(); //定义一个函数指针类型。
Function1 f1;
class Test1
{
public:
// 被调用的成员函数
void Memberfun1()
{
printf("%s \n", "Calling Test1::Memberfun1 OK");
}
void Memberfun2()
{
f1 = reinterpret_cast<Function1>(Memberfun1); // 将成员函数指针赋予普通函数指针f1,编译出错
f1();
}
};
int main()
{
Test1 t1;
t1.Memberfun2();
return 0;
}
#include <stdio.h>
#include <stdlib.h>
class Test2
{
public:
int __cdecl Compare(const void* elem1, const void* elem2) // 成员函数
{
printf("%s \n", "Calling Test2::Memberfun OK");
return *((int*)elem1) - *((int*)elem2);
}
void Memberfun()
{
data[0] = 2;
data[1] = 5;
qsort(data, 2, sizeof(int), Compare); // 标准库函数调用成员函数,编译出错
}
private:
int data[2];
};
int main()
{
Test2 t2;
t2.Memberfun(); //调用成员函数。
return 0;
}
#include <stdio.h>
#include "stdlib.h"
class Test3
{
public:
void Memberfun1(void(*f2)())
{
f2(); // 成员函数1调用成员函数2
}
//成员函数
void Memberfun2()
{
printf("%s \n", "Calling Test3::Memberfun2 OK");
}
void Memberfun3()
{
Memberfun1(Memberfun2); // 编译出错
}
};
int main()
{
Test3 t3;
t3.Memberfun3(); //调用成员函数。
return 0;
}
#include <stdio.h>
#include <stdlib.h>
typedef void (*Function1)(); //定义一个函数指针类型。
Function1 f1;
// 被调用的成员函数
void Memberfun1()
{
printf("%s \n", "Calling Memberfun1 OK");
}
class Test1
{
public:
void Memberfun2()
{
f1 = reinterpret_cast<Function1>(Memberfun1); // 将成员函数指针赋予普通函数指针f1,编译出错
f1();
}
};
int main()
{
Test1 t1;
t1.Memberfun2();
return 0;
}
#include <iostream>
#include <typeinfo.h>
class Test;
// 一个未定义的类。
class Test2 // 一个空类。
{
};
class Test3 // 一个有定义的类。
{
public:
void (*memberfun)();
void Memberfun1(void(*f2)())
{
f2(); //成员函数1调用成员函数2
}
void Memberfun2(); //成员函数2。
};
class Test4 : virtual Test3, Test2 // 一个有virtual继承的类(derivative class)
{
public:
void Memberfun1(void(*f2)())
{
f2();
}
};
class Test5 : Test3, Test2 // 一个继承类(derivative class)
{
public:
void Memberfun1(void(*f2)())
{
f2();
}
};
int main()
{
std::cout << "一般函数指针长度= " << sizeof(void(*)()) << std::endl;
std::cout << std::endl << "类的成员函数指针长度:" << std::endl << std::endl;
std::cout << "Test3类成员函数指针长度=" << sizeof(void(Test3::*)()) << std::endl;
std::cout << "Test5类成员函数指针长度=" << sizeof(void(Test5::*)()) << std::endl;
std::cout << "Test4类成员函数指针长度=" << sizeof(void(Test4::*)()) << std::endl;
std::cout << "Test类成员函数指针长度=" << sizeof(void(Test::*)()) << std::endl;
return 0;
}