我们在程序中定义了一个基类,该基类有n个子类,为了方便,我们经常定义一个基类的指针数组,数组中的每一项指向都指向一个子类,那么在程序中我们如何判断这些基类指针是指向哪个子类呢?

关键字

typeid,有关此关键字的详细内容请自行百度。

代码:

 1 #include <iostream>
 2 #include <string>
 3 #include <typeinfo>
 4 using namespace std;
 5 
 6 class father
 7 {
 8 public:
 9     virtual void fun()
10     {
11         cout<<"this is father fun call\n";
12     }
13     virtual int id()
14     {
15         return 0;
16     }
17 };
18 
19 class son1: public father
20 {
21 public:
22 
23     void fun()
24     {
25         cout<<"this is the son1 fun call\n";
26     }
27 
28     int id()
29     {
30         return 1;
31     }
32 
33 };
34 
35 class son2: public father
36 {
37 public:
38 
39     void fun()
40     {
41         cout<<"this is the son2 fun call\n";
42     }
43 
44     int id()
45     {
46         return 2;
47     }
48 };
49 
50 int main()
51 {
52     father * pf;
53     son1 s1;
54     son2 s2;
55     pf = &s1;
56     cout << typeid(*pf).name() <<endl;
57     string temp(typeid(*pf).name());
58     if(temp == "class son1")
59     {
60         cout<<"this is son1\n";
61     }
62     else if(temp == "class son2")
63     {
64         cout<<"this is son2\n";
65     }
66 
67     pf = &s2;
68     cout << typeid(*pf).name() <<endl;
69     string temp1(typeid(*pf).name());
70     if(temp1 == "class son1")
71     {
72         cout<<"this is son1\n";
73     }
74     else if(temp1 == "class son2")
75     {
76         cout<<"this is son2\n";
77     }
78     return 0;
79 }