c++虚函数
来源:互联网 发布:小学生的网络安全教育 编辑:程序博客网 时间:2024/05/18 21:08
using namespace std;
class Base {
public:
virtual void f() { cout << "Base::f" << endl; }
virtual void g() { cout << "Base::g" << endl; }
virtual void h() { cout << "Base::h" << endl; }
};
typedef void(*Fun)(void);
int main()
{
Base b;
Fun pFun = NULL;
cout << "V-Table: " << (int*)(&b) << endl;
cout << "V-Table --The First Function: " << (int*)*(int*)(&b) << endl;
pFun = (Fun)*((int*)*(int*)(&b));
pFun();
((Fun)*((int*)*(int*)(&b)+0))(); // Base::f()
((Fun)*((int*)*(int*)(&b)+1))(); // Base::g()
((Fun)*((int*)*(int*)(&b)+2))(); // Base::h()
return 0;
}
====================================================================================================================================
V-Table: 0xbfc65298
V-Table --The First Function: 0x80489c0
Base::f
Base::f
Base::g
Base::h
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
#include <iostream>
using namespace std;
class basic{
private:
public:
basic(){cout << "Construct basic\n";}
// ~basic(){cout << "Deconstruct basic\n";}
virtual void show(int i= 10){cout << "In basic, and i = "<< i << endl;return;}
virtual ~basic(){ cout << "In virutal decontruct basic\n";}
virtual void show_basic(){cout << "In basic, show_basic\n";}
};
class sub_basic: public basic{
private:
public:
sub_basic(){cout << "Construct sub_basic\n";}
// ~sub_basic(){cout << "Deconstruct sub_basic\n";}
void show(int i = 99){cout << "In sub_basic, and i = " << i << endl;return;}
virtual ~sub_basic(){cout << "In virtual deconstruct sub_basic\n";}
};
int main()
{
basic * pb = new sub_basic;
sub_basic *pb_s = dynamic_cast<sub_basic*>(pb);
pb->show();
// pb->show_basic();
pb_s->show();
delete pb;
return 0;
}
====================================================================================================================================
Construct basic
Construct sub_basic
In sub_basic, and i = 10
In sub_basic, and i = 99
In virtual deconstruct sub_basic
In virutal decontruct basic
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
#include <iostream>
using namespace std;
class basic{
private:
public:
// basic(){cout << "Construct basic\n";}
// ~basic(){cout << "Deconstruct basic\n";}
virtual void show(){cout << "In basic, show()"<< flush<<endl;}
virtual void show_basic(){cout << "In basic, show_basic\n"<<flush;}
virtual void first(){cout<<"In basic, in first()\n"<<flush;}
void second(void){cout<<"Basic, in second()\n"<<flush;}
virtual void third(){cout<<"In basic, in third()\n"<<flush;}
void forth(void){cout << "Basic, in forth()\n"<<flush;}
// virtual ~basic(){ cout << "In virutal decontruct basic\n"<<flush;}
};
class sub_basic: public basic{
private:
public:
// sub_basic(){cout << "Construct sub_basic\n";}
// ~sub_basic(){cout << "Deconstruct sub_basic\n";}
virtual void show(int i = 99){cout << "In sub_basic, show()"<< endl<<flush;}
virtual void show_basic(){cout << "In sub_basic, show_basic()\n"<<flush;}
virtual void first(){cout<<"In sub_basic, in first()\n"<<flush;}
virtual void third(void){cout<<"In sub_basic, in third()\n"<<flush;}
// virtual ~sub_basic(){cout << "In virtual deconstruct sub_basic\n";}
};
typedef void(* pFunc)(void);
int main()
{
basic * pb = new sub_basic;
sub_basic *pb_s = dynamic_cast<sub_basic*>(pb);
pb->show();
pb->show_basic();
pb_s->show();
delete pb;
cout << sizeof(basic)<< endl;
cout << sizeof(sub_basic) << endl;
sub_basic var;
cout<<endl<<endl<<"Begin to test\n"<<flush;
((pFunc)*((int*)*(int*)(&var)+0))();
((pFunc)*((int*)*(int*)(&var)+1))();
((pFunc)*((int*)*(int*)(&var)+2))();
((pFunc)*((int*)*(int*)(&var)+3))();
// ((pFunc)*((int*)*(int*)(&var)+4))();
// ((pFunc)*((int*)*(int*)(&var)+5))();
// ((pFunc)*((int*)*(int*)(&var)+6))();
// ((pFunc)*((int*)*(int*)(&var)+7))();
cout<< "Finish testing"<<flush<<endl<<endl;
return 0;
}
- C/C++--虚函数
- 【C/C++】纯虚函数
- C/C++, 虚函数表
- C++:虚函数用途
- 虚函数详解(C++)
- 虚函数(C++)
- c++-->虚函数 2
- C++ 虚函数
- C++:虚函数
- C++_虚函数
- 【c++】虚函数
- 【C++】虚函数
- C++ 虚函数
- [C++]虚函数
- 虚函数 假多态 C++
- C/C++ 虚函数
- C++:虚函数理解
- C++---虚函数
- Servlet、Jsp性能优化分析
- Transforms CTM, 转换矩阵
- linux awk 内置变量实例
- Android中scrollview的scrollto方法不起作用的办法
- svn 命令
- c++虚函数
- mongodb认证后的远程连接
- Hibernate的jar包功能说明
- 工作中用到的网址/工具/软件整理
- android多屏幕支持
- 运行jrockit的jrcmd常见问题
- 特殊符号回车换行
- Node.Js TLS(SSL) HTTPS双向验证
- 十种做不大的老板