晃晃悠悠

isrobert

  VC知识库BLOG :: 首页 :: 新随笔 :: 联系 :: 聚合  :: 登录 ::
  12 随笔 :: 0 文章 :: 34 评论 :: 0 Trackbacks
<2008年11月>
2627282930311
2345678
9101112131415
16171819202122
23242526272829
30123456

留言簿(0)

随笔分类

随笔档案

文章档案

相册

收藏夹

相关链接

搜索

最新评论

阅读排行榜

评论排行榜

#include <iostream>
using namespace std;

struct foo
{
    // virtual ~foo() {};
};
struct bar : foo
{
};
int main( void )
{
    foo a;
    bar b;
    foo& c = b;

    cout << typeid(a).name() << endl;
    cout << typeid(b).name() << endl;
    cout << typeid(c).name() << endl;

    return 0;
}
运行结果
struct foo
struct bar
struct foo

去掉注释,运行结果
struct foo
struct bar
struct bar

为什么???
posted on 2007-01-26 18:20 isrobert 阅读(1654) 评论(2)  编辑 收藏

评论

# re: typeid 2007-01-28 08:59 gbb21
在vc下,使用typeid的时候,如果typeid施加给的类型是没有vptr的class或者根本不是class
那么汇编是
mov  dword ptr [addr],offset A `RTTI Type Descriptor' (42AD40h)
也就是编译器生成一个简单的type_info对象的表,并且在编译期静态决定下标,做一个简单查表操作。

# re: 你留言问的问题 2007-02-07 22:34 清风雨
不好意思!

一直比较忙,没有上来看blog,你问的问题的解释是(http://blog.vckbase.com/zhangjw_cn/archive/2007/01/24/18324.html#24177):
子类的方法覆盖了父类的方法——虽然参数不同,也就是说重载不能在父子类间,只能在同一个类上实施;不同名,则不会覆盖。可以看下面的代码
#include <iostream>
class base
{
public:
    void fun( int arg )
    {
        std::cout << "In base" << arg << std::endl;
    }
};
class derive : public base
{
public:
    void fun( int arg1,int arg2 )
    {
        std::cout << "In derive" << arg2 << std::endl;
    }
};
int main( int argc,char *argv[] )
{
    derive d;
    d.fun( 1 );
    d.fun( 1,2 );
    return 0;
}



标题  
姓名  
主页
验证码 *
内容   
  登录  使用高级评论  Top
[使用Ctrl+Enter键可以直接提交]