南京爱立信笔试一题

来源:互联网 发布:吉林农业大学网络课 编辑:程序博客网 时间:2024/05/17 04:43
#include<iostream> #include<stdio.h> using namespace std; class base {  public: base(){cout<<"base::base()\n";} virtual ~base(){cout<<"base::~base()\n";} void func1(){cout<<"base::func1()\n";} virtual void func2(){cout<<"base::func2()\n";} private :   int a;}; class inherited:public base {  public:  inherited(){cout<<"inherited::inherited()\n";}~inherited(){cout<<"inherited::~inherited()\n";} void func1(){cout<<"inherited::func1()\n";}void func2(){cout<<"inherited::func2()\n";}private :    int b; };  void func1() {  inherited a;base b;  printf("sizeof child class is %d\n,and the address of child class is %0x\n",sizeof(a),&a); printf("sizeof parent class is %d\n,and the address of parent class is %0x\n",sizeof(b),&b);  cout << "-----------------------1" << endl; base *pb;  pb=(base*)&a;  printf("pb 's address is %0x\n",pb); cout << "-----------------------2" << endl;  pb->func1(); //fun1是非虚函数,所以没有动态绑定的情况,主要看指针类型  cout << "-----------------------3" << endl; pb->func2(); //fun2是虚函数,有动态绑定,主要要看指针指向哪个对象 cout << "-----------------------4" << endl;}void func2(){  inherited * pa=new inherited; printf("child's address is %0x\n",pa); base * pb=(base*)pa; printf("after transfer the address is %0x\n",pb);pb->func1();pb->func2();delete pa; }  int main() {  cout<<"func1:\n"; func1(); cout<<"\nfunc2:\n"; func2(); return 0; }

0 0
原创粉丝点击