一些不好的习惯都是用小写,但又没有区分开token,看看代码再说,下面的代码是我在测试polymorphism时写的一部分,怎么也查不出,最后主意到下面红色标志出来的语句,他们(animal)重复了,要区分开来。
重复名的有很多情况,以后遇见再在一起总结,先记录下来。
- #include <iostream>
-
#include <cstring>
-
#include <string>
-
-
using namespace std;
-
-
enum zoo_obj_kind{
-
null = 0,
-
#define zk_null (zoo_obj_kind(null))
-
no = 0,
-
#define zk_no (zoo_obj_kind(no))
-
animal = 1,
-
#define zk_animal (zoo_obj_kind(animal))
-
plant = 2,
-
#define zk_plant (zoo_obj_kind(plant))
-
others = 3,
-
#define zk_others (zoo_obj_kind(others))
-
max = 4
-
#define zk_max 4
-
-
};
-
-
-
static const char * zoo_kind_str [zk_max ] ={
-
"null",
-
"animal",
-
"plant",
-
"others"
-
};
-
-
class obj{
-
private:
-
char name [40];
-
// void *other_msg;
-
public:
-
obj() {
-
strcpy(name,"null") ;
-
}
-
obj(char *nm){
-
strncpy(name,!nm?"null":nm,sizeof(name));
-
}
-
void say(){
-
cout << "name:" << name << endl;
-
}
-
void say(obj *obj){
-
!obj
-
? cout << "null\n"
-
: cout << "name:" << obj->name << endl;
-
}
-
};
-
class zoo_obj{
-
private:
-
zoo_obj_kind z_kind;
-
char name [40];
-
void *other_msg;
-
public:
-
zoo_obj() {
-
z_kind = null;
-
strcpy(name,"null") ;
-
}
-
zoo_obj(char *nm, zoo_obj_kind k){
-
strncpy(name,!nm?"null":nm,sizeof(name));
-
z_kind = k;
-
}
-
void say(){
-
cout << "name:" << name << ",kind:"
-
<< zoo_kind_str[(int) z_kind] << endl;
-
}
-
void say(zoo_obj *obj){
-
!obj
-
? cout << "null\n"
-
: cout << "name:" << obj->name << endl;
-
}
-
};
-
-
-
-
class animal:public obj{
-
private:
-
int lags;
-
public:
-
-
animal(char *nm, int l) :lags(l), obj(nm){ }
-
-
void say(){
-
obj::say();
-
cout << "lag:" << lags << endl;
-
}
-
};
-
-
int main(void){
-
-
zoo_obj obj = zoo_obj( "cat", zoo_obj_kind(animal));
-
obj.say();
-
-
class::animal dog ("joel‘s dog",4);
-
dog.say();
-
-
-
}