// test.cpp : 定义控制台应用程序的入口点。
//
#include "stdafx.h"
#include <cstdlib>
#include <new>
#include <iostream>
using namespace std;
class no_virtual {
int a;
public:
void x() const{}
int i() const {return 1;}
};
class one_virtual {
int a;
public:
virtual void x() const {}
int i() const {return 1;}
};
class two_virtuals{
int a;
public:
virtual void x() const {cout<<"hello two_virtuals x()"<<endl;}
virtual int i() const {cout<<"hello two_virtuals i()"<<endl; return 1;}
};
int _tmain(int argc, _TCHAR* argv[])
{
cout<<"int: "<<sizeof(int)<<endl;
cout<<"no_virtual: "
<<sizeof(no_virtual)<<endl;
cout<<"void*: "<<sizeof(void*)<<endl;
cout<<"one_virtual: "
<<sizeof(one_virtual)<<endl;
cout<<"two_virtuals: "
<<sizeof(two_virtuals)<<endl;
two_virtuals two;
int (*f)();
long* void_two=reinterpret_cast<long*>(&two);
long* vpoint=(long*)(void_two[0]);
int x;
f=reinterpret_cast<int(*)()>(vpoint[0]);
x=f();
f=reinterpret_cast<int(*)()>(vpoint[1]);
x=f();
return 0;
}
输出:
int: 4
no_virtual: 4
void*: 4
one_virtual: 8
two_virtuals: 8
hello two_virtuals x()
hello two_virtuals i()
该程序同时能说明,返回值不能确定一个函数。