荔园在线
荔园之美,在春之萌芽,在夏之绽放,在秋之收获,在冬之沉淀
[回到开始]
[上一篇][下一篇]
发信人: bakey (sbb的猪), 信区: Program
标 题: [合集]关于多态下运行时类型标识的问题
发信站: 荔园晨风BBS站 (2005年11月29日16:12:01 星期二), 站内信件
☆ 1 ──────────── 我是分割线 ─────────────────☆
发信人: bso (meteor), 信区: Program
标 题: 关于多态下运行时类型标识的问题
时 间: Mon Nov 28 22:45:49 2005
以下程序在VC++6.0下编译时,若加上virtual关键字,则出现警告,运行出现错误,去掉virtua
l关键字,可以编译运行.
由于我机上没有VC.NET,所以不能确定VC6.0是否支持此类用法
哪位大虾能帮忙看看?
试试在VC.NET下能否加上virtual实现多态运行时类型标识?
真是没想到,居然在Dev C++上能够实现多态运行时类型标识,只是在输出是可能是编译器的
问题
输出时,它在基类前加了6,在Cat派生类前加了3,在派生类Platypus前加了8
看来VC6.0没有支持新的RTTI标准,可能VC.NET会支持吧
在多态(在基类加上virtual)下这个程序应该输出实际对象类型,在非多态下输出基类类型
#include <iostream>
#include <typeinfo>
using namespace std;
//此程序用于测试 typeid 的使用
//在Dev C++ 4.980版本下运行通过
class Mammal{
public:
virtual bool lays_eggs(){return false;} //virtual 用于支持多态
};
class Cat:public Mammal{
public:
};
class Platypus:public Mammal{
public:
bool lays_eggs(){return true;}
};
void WhatMammal(Mammal &ob) //当typeid被用于一个多态类对象的引用时,将返
回实际引用的对象类型,该类型可以是派生类型
{
cout<<"ob is referencing an object of type ";
}
int main()
{
Mammal *p,AnyMammal;
/*
p=&AnyMammal;
*/
return 0;
}
--
meteor
梦想农庄音乐站
http://192.168.117.111
音乐模式:http://192.168.117.111/music.htm
星动BT站(每天更新哦)
http://192.168.117.111/plus_bt.asp
※ 来源:.荔园晨风BBS站 http://bbs.szu.edu.cn [FROM: 192.168.117.111]
※ 修改:.bso 於 Nov 29 01:51:28 2005 修改本文.[FROM: 192.168.117.111]
※ 修改:.bso 於 Nov 29 01:58:00 2005 修改本文.[FROM: 192.168.117.111]
※ 修改:.bso 於 Nov 29 02:06:12 2005 修改本文.[FROM: 192.168.117.111]
☆ 2 ──────────── 我是分割线 ─────────────────☆
发信人: FineBoy (FineBoy), 信区: Program
标 题: Re: 关于多态下运行时类型标识的问题
时 间: 2005年11月29日08:42:44 星期二
vc6.0默认不支持,你应该打开GR编译选项。
☆ 3 ──────────── 我是分割线 ─────────────────☆
发信人: bso (meteor), 信区: Program
标 题: Re: 关于多态下运行时类型标识的问题
时 间: Tue Nov 29 15:33:18 2005
如何打开GR编译选项?
☆ 4 ──────────── 我是分割线 ─────────────────☆
发信人: bso (meteor), 信区: Program
标 题: Re: 关于多态下运行时类型标识的问题
时 间: Tue Nov 29 15:39:01 2005
果然可以啊~~~~~`打开GR编译选项了~~~~编译正确~~~呵呵
[回到开始]
[上一篇][下一篇]
荔园在线首页 友情链接:深圳大学 深大招生 荔园晨风BBS S-Term软件 网络书店