#include <iostream>
#include<typeinfo.h>
using namespace std;
class A
...{
private:
int x,y;
char b[3];
public:
A()...{ x = 9; y = 8;}
int Add()...{return x + y;}
//virtual print()const{ cout << x;cout <<y; }
};

int main(void)
...{
A a;
A *p = &a;
cout << "the size of a is: " << sizeof(a) << endl;
/**//*没有虚函数的时候打印12,因为两个int型是8,然后再加上char【】;
对于任何的类型都是4的最近倍数。*/

/**//*如果上面的虚拟函数有效,那么打印的时候就是在原来的基础上加上4
因为类中会加了一个vfptp的域。是一个表。里面存放了所有的虚函数的调用。*/
cout << "the size of a is: " << sizeof(p) << endl;
/**//* 因为p是一个指针,所以大小就是4*/
cout << typeid(a).name() << endl;//打印对象a的类名。
cout << typeid(p).name() << endl;//打印对象a的类名。

return 0;
}
#include <iostream>
#include <typeinfo.h>
class Base {
public:
virtual void vvfunc() {}
};
class Derived : public Base {};
using namespace std;
int main()
{
Derived* pd = new Derived;
Base* pb = pd;
cout << typeid( pb ).name() << endl; //prints "class Base *"
cout << typeid( *pb ).name() << endl; //prints "class Derived"
cout << typeid( *pd ).name() << endl; //prints "class Derived"
cout << typeid( pd ).name() << endl; //prints "class Derived *"
delete pd;
}
#include <iostream>
#include <typeinfo>
using namespace std;
class Test
{
public:
virtual ~Test()
{
}
virtual void Out()
{
cout<<typeid(*this).name()<<endl;
}
Test()
{
cout<<typeid(*this).name()<<endl;
}
};
class FromTest : public Test
{
public:
FromTest(){}
};
void main()
{
// void * v=new Test;
// Test * t=static_cast<Test *>(v);
//// Test * t=(Test *)(v);
// cout<<typeid(t).name()<<endl;
// t->Out();
// int i;
// cout<<typeid(i).name()<<endl;
FromTest ft;
Test * t;//=new FromTest;
Test l;
l.Out();
t=&ft;
cout<<typeid(*t).name()<<endl;
}
------------------------------------------------------------
<script type="text/javascript" src="http://pagead2.googlesyndication.com/pagead/show_ads.js"> </script>

本文通过几个C++示例介绍了虚函数的工作原理及其如何影响类实例的大小,并展示了如何使用typeid操作符来确定对象的类型。
303

被折叠的 条评论
为什么被折叠?



