首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C++ >

运行时判断自身是属于哪个类,该如何处理

2012-02-08 
运行时判断自身是属于哪个类一组类有继承关系 CBase CDerived:CBase 函数CBase::ToWhomIBelong()判断当

运行时判断自身是属于哪个类
一组类有继承关系 CBase; CDerived:CBase; 函数CBase::ToWhomIBelong()判断当前对象是属于CBase还是CDerived,请问如何实现?好像有个什么机制的。谢谢

[解决办法]
typeid ???
[解决办法]
多态
[解决办法]
看看深入浅出MFC,最开始就讲了动态识别类型
[解决办法]
函数可以,类好像没有办法,每个类里加一句[color=#84c787]话加打印一下吧

C/C++ code
 
#[/color][color=#84c887]i[/color][color=#85c887]nclu[/color][color=#85c886]de <io[/color][color=#86c886]stream>
/[/color][color=#87c886]/s[/color][color=#87c885]hared_[/color][color=#87c985]pt[/color][color=#88c985]r
#inclu[/color][color=#88c984]de [/color][color=#89c984]"boost/sh[/color][color=#8ac984]ared_[/color][color=#8ac983]pt[/color][color=#8aca83]r.h[/color][color=#8bca83]pp"

clas[/color][color=#8cca83]s A
[/color][color=#8cca82]{
publ[/color][color=#8dca82]ic:
v[/color][color=#8dcb82]oid [/color][color=#8ecb81]fun()
{
[/color][color=#8fcb81]std::[/color][color=#8fcb80]cout [/color][color=#90cb80] < < [/color][color=#90cc80]__FUN[/color][color=#91cc80]CDNA[/color][color=#91cc7f]ME__ <[/color][color=#92cc7f] < std::end[/color][color=#93cc7f]l[/color][color=#93cc7e];
[/color][color=#93cd7e]std::[/color][color=#94cd7e]cout < < [/color][color=#94cd7d]"ok[/color][color=#95cd7d]..." < < s[/color][color=#96cd7d]td:[/color][color=#96ce7d]:e[/color][color=#96ce7c]ndl;
[/color][color=#97ce7c]}
};

int [/color][color=#98ce7c]m[/color][color=#98ce7b]ain()
{
[/color][color=#99ce7b]b[/color][color=#99cf7b]oost::[/color][color=#99cf7a]sh[/color][color=#9acf7a]ared_ptr <[/color][color=#9bcf7a]A> p(n[/color][color=#9bcf79]ew A[/color][color=#9ccf79]([/color][color=#9cd079]));
p->f[/color][color=#9dd079]un([/color][color=#9dd078]);

re[/color][color=#9ed078]turn 0;
}[/color]


[解决办法]
RUNTIME_CLASS() + IsKindOf()
[解决办法]
C/C++ code
#include <iostream>#include <string>using namespace std;class CBase{public:    void ToWhomIBelong() {        cout << "I am " << showCn() << endl;    };private:    virtual string showCn() {        return string("CBase");    }};class CDerived: public CBase{private:    string showCn() {        return string("CDerived");    }};int main(){    CBase *pb= new CBase();    CBase *pd= new CDerived();    cout<<"pb:";    pb->ToWhomIBelong();    cout<<"pd:";    pd->ToWhomIBelong();    delete pd;    delete pb;    return 0;}
[解决办法]
C/C++ code
class Base{public:    virtual ~Base() {};    static bool IsBaseObject(Base* pB);};class Derived : public Base{};bool Base::IsBaseObject(Base* pB){    Derived* pD = dynamic_cast<Derived*>(pB);    if(pD != NULL)        return false;    else        return true;}int _tmain(int argc, _TCHAR* argv[]){    Base* p1 = new Base();    Base* p2 = new Derived();    bool bBaseObject1 = Base::IsBaseObject(p1);    bool bBaseObject2 = Base::IsBaseObject(p2);        delete p1;        delete p2;    return 0;}
[解决办法]
探讨
C/C++ code

#include <iostream>


#include <string>

using namespace std;
class CBase
{
public:
void ToWhomIBelong() {
cout << "I am " << showCn() << endl;
};
private:
v……

热点排行