一道很经典的C++面试题,希望大虾进行指点。
希望大虾能指教,对路过的朋友也希望有所帮助,呵呵!
创建4个类,上帝,动物,狗,猪。其中上帝只有一个,只有上帝才能创建动物,动物能跑,狗会叫,猪会吃。 谢谢了
问题点数:80、回复次数:73Top
1 楼pomelowu(羽战士)回复于 2006-03-17 12:05:50 得分 30
呵呵~
enum animal
{
DOG,
PIG
}
class Animal
{
virtual void run() { cout << "run\n"; }
virtual void do_special() = 0;
};
class Dog : public Animal
{
virtual void do_special() { do_bark(); }
virtual void do_bark() { cout << "bark\n"; }
};
class Pig : public Animal
{
virtual void do_special() { do_eat(); }
virtual void do_eat() { cout << "eat\n"; }
};
class God
{
public:
Animal * CreateAnimal(animal type)
{
Animal *pAnimal = NULL;
switch (type)
{
case DOG:
pAnimal = new Dog;
cout << "God Created Dog\n";
break;
case PIG:
pAnimal = new Pig;
cout << "God Created Pig\n";
break;
}
}
void KillAnimal(Animal *pAnimal)
{
if (pAnimal)
{
delete pAnimal;
pAnimal = NULL;
}
}
};Top
2 楼newcore(to be or not to be, it's a question.)回复于 2006-03-17 12:11:47 得分 0
小拍一下... :)
1、上帝只有一个
2、又见swith...case...
Top
3 楼JonneyR(lxc)回复于 2006-03-17 12:18:51 得分 0
顶Top
4 楼wawaku(一堆裤衩!)回复于 2006-03-17 12:20:14 得分 0
上帝也太不仁慈了,好不容易创建了动物,怎么还能杀呢
因违背《中华人民共和国野生动物保护法》,故去掉KillAnimal()方法.Top
5 楼LongLongAgoImBoy(ThereIsAMe)回复于 2006-03-17 12:59:54 得分 0
Animal * CreateAnimal(animal type)
上帝用此方法创建动物的结果是这个动物将不知道躲到哪里去了,因为上帝把牵这个动物的绳子丢了。而且上帝肯定能有好几个,看来天庭要不太平了。Top
6 楼ydfivy(我就是一送外卖的)回复于 2006-03-17 13:03:33 得分 0
感觉考的是设计模式.
SingleTon模式和类工厂Top
7 楼billy145533($_$)回复于 2006-03-17 13:09:15 得分 0
markTop
8 楼orbit(走了走了)回复于 2006-03-17 13:10:58 得分 0
上帝使用单实例模式,创建动物用builder模式就行了,比工厂模式简单Top
9 楼xiao_fang(frank)回复于 2006-03-17 13:11:18 得分 0
好题目,果然精典!
pomelowu(羽战士)还没看清楚题吧:)Top
10 楼pomelowu(羽战士)回复于 2006-03-17 13:25:13 得分 0
嗯。。。习惯性省题漏条件。。。上帝只有一个:
class God
{
public:
static God * Instance(){ static _GodInstance; return &_GodInstance; }
public:
Animal * CreateAnimal(animal type)
{
Animal *pAnimal = NULL;
switch (type)
{
case DOG:
pAnimal = new Dog;
cout << "God Created Dog\n";
break;
case PIG:
pAnimal = new Pig;
cout << "God Created Pig\n";
break;
}
}
void KillAnimal(Animal *pAnimal)
{
if (pAnimal)
{
delete pAnimal;
pAnimal = NULL;
}
}
protected:
God() { }
};
=============================
switch...case...
有什么说法么?Top
11 楼pomelowu(羽战士)回复于 2006-03-17 13:32:40 得分 0
其实也就是设计模式。用Singleton应该没什么疑问,至于用类厂。。呵呵,正在学习用COM呢。Top
12 楼xiao_fang(frank)回复于 2006-03-17 14:21:06 得分 0
“。。。只有上帝才能创建动物。。。”
——题目并没有要求上帝KillAnimal,呵呵。。
——“只有”上帝才能。。。如果保证呢?现在是人人都可以创建动物:
Dog adog = new Dog();Top
13 楼bestmai(绯村剑心)回复于 2006-03-17 15:07:51 得分 0
animal构造函数private, friend class God
至于switch case,其实可以避免的,将创建动物的函数抽出来,如
animal* CreateCat();
animal* CreateDog();
然后,建一个animal_type和对应创建动物函数的函数指针的map就行了,创建时直接从map中找animal_type,调用对应的函数,这样做扩展就方便多了,扩展时也不用修改God的代码
Top
14 楼zwl327(疾劲野风)回复于 2006-03-17 15:26:38 得分 0
MarkTop
15 楼pomelowu(羽战士)回复于 2006-03-17 15:32:04 得分 0
将创建动物的函数抽出来,如
animal* CreateCat();
animal* CreateDog();
然后,建一个animal_type和对应创建动物函数的函数指针的map就行了,创建时直接从map中找animal_type,调用对应的函数,这样做扩展就方便多了,扩展时也不用修改God的代码
_____________________
抽象工厂模式最原始的实现吧。其实我一直觉得,反正都要修改这个map,就是看这个map放的位置在哪里而已,而且减少了animal* CreateCat();这种开销。所以在类比较少的时候更喜欢用一个switch...case...
=====================
——题目并没有要求上帝KillAnimal,呵呵。。
_____________________
上帝是万能的。。。^_^
=====================
——“只有”上帝才能。。。如果保证呢?现在是人人都可以创建动物:
_____________________
寒个~又没仔细看。。。把Dog和Pig的构造函数声明为protected,然后申明friend class God——这下狗妈妈都要让上帝下小狗了。。。
对了,还有些错误。。。我只是写,没有编译。。。
1、静态实例的声明漏了类名。
static God * Instance(){ static God _GodInstance; return &_GodInstance; }
2、CreateAnimal没有返回值
return pAnimal;
=.=好累。。。不知道还有错误没。。。大家继续拍~Top
16 楼pomelowu(羽战士)回复于 2006-03-17 15:36:38 得分 0
又,animal构造函数private, friend class God
这不行的吧?构造函数比不得其他,无法虚拟的吧。。。难道我记错了?Top
17 楼zwl327(疾劲野风)回复于 2006-03-17 15:42:25 得分 0
又,animal构造函数private, friend class God
这不行的吧?构造函数比不得其他,无法虚拟的吧。。。难道我记错了?
继续拍:
private是私有,不是虚拟.Top
18 楼xx_jj()回复于 2006-03-17 16:54:34 得分 0
好东西 学习了Top
19 楼fisker0303(天塌了,地陷了,小花狗不见了.)回复于 2006-03-17 17:01:11 得分 0
羽战士,牛!Top
20 楼cocopww(春天我把老婆种下去,秋天我就有好多好多老婆啦)回复于 2006-03-17 17:06:59 得分 0
markTop
21 楼zwl327(疾劲野风)回复于 2006-03-17 17:30:44 得分 0
这道题太经典了,一道题考了类相关的很多方面的知识..Top
22 楼LongLongAgoImBoy(ThereIsAMe)回复于 2006-03-17 17:30:59 得分 0
又见小羽,哈哈Top
23 楼Atomictry(天影)回复于 2006-03-17 18:23:03 得分 20
1. 先建单件模式模板
template<class T>
class CSingleton {
private:
static std::auto_ptr < T > m_pInstance;
protected:
CSingleton() {}
~CSingleton() {}
public:
static T* getInstance()
{
if (!m_pInstance.get()) // 应该加锁后再判断,否则不是线程安全的,此处忽略了。
{
m_pInstance = std::auto_ptr < T >(new T());
}
return m_pInstance.get();
}
};
template<class T> std::auto_ptr < T > CSingleton< T >::m_pInstance;
2. 这里可以用工厂方法模式,因为有可能因为又要创建植物等类,先建立抽象工厂
/************** Abstract Factory **************/
#include <vector>
#include <algorithm>
using namespace std;
typedef vector < CAbstractAnimal * > AnimalQueue;
#define DELETEIF(p) \
if (p) { \
delete p; \
p = NULL; \
}
class CAbstractFactory
{
public:
CAbstractFactory() {}
// 删除所有创建的动物对象
virtual ~CAbstractFactory() { for_each(m_AnimalQueues.begin(), m_AnimalQueues.end(), DeleteIt); }
virtual void CreateAnimal() = 0;
private:
static void DeleteIt(CAbstractAnimal *pAnimal) { DELETEIF(pAnimal); }
public:
AnimalQueue m_AnimalQueues; // 由一个vector维护动物列表
};
3. 实现所有动物的抽象类,用来抽取出它们共性
/************* Abstract Product ***************/
class CAbstractAnimal
{
public:
CAbstractAnimal() {}
virtual ~CAbstractAnimal() {}
//virtual void Sleep() = 0; // 共性: 都需要睡眠
};
4. 实现具体的动物类:
/***************** ProductA *******************/
class CDog : public CAbstractAnimal
{
public:
CDog() {}
virtual ~CDog() {}
//virtual void Sleep() { TRACE("Dog sleep...\n"); }
virtual void Bark() { TRACE("Dog bark\n"); }
};
/***************** ProductB *******************/
class CPig : public CAbstractAnimal
{
public:
CPig() {}
virtual ~CPig() {}
//virtual void Sleep() { TRACE("Pig sleep...\n"); }
virtual void Eat() { TRACE("Pig eat...\n"); }
};
5. 实现具体工厂类,这样就不会有switch...case...了吧
/************* Concrete Factory ***************/
class God : public CAbstractFactory, public CSingleton<God>
{
public:
God() {}
virtual ~God() {}
// Operate
public:
virtual void CreateAnimal() {
m_AnimalQueues.push_back(new CDog);
m_AnimalQueues.push_back(new CPig);
}
};
6. 调用方法,即实例化God
God::getInstance()->CreateAnimal();
// 所有的代码将在我的blog给出。Top
24 楼Atomictry(天影)回复于 2006-03-17 18:28:17 得分 0
大家拍砖砖~~~Top
25 楼Stefine(CSDN最菜滴猩猩)回复于 2006-03-17 19:28:57 得分 0
学习后
帮顶Top
26 楼yinqing_yx(淘汰引擎)(玩虚一族)回复于 2006-03-17 19:58:27 得分 0
学了不少~!Top
27 楼rainfall007(夏天的雨)回复于 2006-03-17 23:03:51 得分 0
markTop
28 楼debehe(躯壳)回复于 2006-03-17 23:57:11 得分 0
学习。。Top
29 楼candy0789()回复于 2006-03-18 02:28:58 得分 0
MARKTop
30 楼wuyazhe(wyz&xyl)回复于 2006-03-18 09:09:27 得分 0
路过。路过。Top
31 楼wegotnothingtolosebu(t this is a dirty joke...)回复于 2006-03-18 09:31:51 得分 0
markTop
32 楼tudou614(魔蟹座的SATAN)回复于 2006-03-18 09:36:34 得分 0
UPTop
33 楼zhenbe(一头栽在C里面)回复于 2006-03-18 12:43:53 得分 0
我来发表一下意见,代码就不写了。
1、动物创建应该是动作自己的事情,怎么创建(实现)应该在相应的动物类里面,在动物基类作一个纯虚函数CreateMe(),函数的执行权在上帝手上。
2、如果新物种的出现,羽战士和天影的代码都得修改,上帝也没有办法。这一点,我觉得在动物的基类上应该有向上帝注册自己的功能,就是说有了新物种必须向上帝汇报,要不新物种也不能创造出来,汇报后上帝就可以创造了,上帝不需要维护一对列表。
3、不过这样好像有点畸形,不是上帝创造,变成动物申请创造了,呵呵。
3、其实羽战士和天影的代码写的够好的了,我只是看到这里兴趣所致,手有点痒,希望能够抛砖引玉。Top
34 楼Atomictry(天影)回复于 2006-03-18 13:33:52 得分 0
zhenbe(一头栽在C里面)讲的应该是观察者模式。
更正一下,我写的那个,CAbstractFactory应该才是上帝;God类不应该取名为God,可能取名为CAnimalFactory更合适,它相当于属于上帝家中众多小作坊中的一个,它是产生动物的小作坊。Top
35 楼jjiaming(阿熊)回复于 2006-03-18 21:48:05 得分 0
拜读各位大哥的回贴,小弟深感佩服,小弟是自学软件,头一次见到这么多的新名词,比如工厂模式、builder模式......弱弱的问一句:这些设计模式是属于软件工程的哪个范畴,同时有哪些经典的书藉对这些设计模式有介绍啊Top
36 楼Chulangzi(楚浪子-我要变强!)回复于 2006-03-18 22:49:46 得分 0
是啊,同有楼上的疑问。
顶,学习Top
37 楼zxx110(新)回复于 2006-03-19 12:12:20 得分 0
MARKTop
38 楼bjstcm(快毕业了~~~)回复于 2006-03-19 13:10:30 得分 0
markTop
39 楼colcn88((散花)只想让家里人过得更好)回复于 2006-03-19 13:51:39 得分 0
=Top
40 楼MagicCarmack(MagiC++)回复于 2006-03-19 14:37:03 得分 0
设计模式:可重用软件基础Top
41 楼robinseeyou(浪G天涯)回复于 2006-03-19 21:03:34 得分 0
迷茫。。Top
42 楼guyanhun(老婆说的都是对的!努力做个好老公!)回复于 2006-03-19 22:10:58 得分 5
呵呵,有意思 ! 设计模式加上一些设计的技巧...
1)创建4个类,上帝 (God ),动物(Animal ),狗(Dog ),猪(Pig )。
2)其中上帝只有一个, 上帝使用单态模式
3)只有上帝才能创建动物, Animal 有个Create 接口是privete 的,同时声明
friend class God 。这样外界就不能访问他了,God 就能。
4)Animal 作为基类是抽象类 ,Dog 和Pig 公有继承自Animal 。
5)动物能跑, Animal 加一个run 的接口 。
6)狗会叫, Dog 有一个 bark 接口。
7)猪会吃。 Pig 有一个 eat 接口 。
8) 其他动物就不会叫和吃了 ? 所以,继续完善:
给Animal 加一个 bark 接口,是virtual function 。函数体里可以什么也不做,
Dog 中的bark 做他该做的事,Pig 可以不管。其实也就是Animal 的什么也不做了。
同样,eat 接口类似。
暂时就是想到这么多了。Top
43 楼guyanhun(老婆说的都是对的!努力做个好老公!)回复于 2006-03-19 22:23:16 得分 0
又,animal构造函数private, friend class God
这不行的吧?构造函数比不得其他,无法虚拟的吧。。。难道我记错了?
继续拍:
private是私有,不是虚拟.
-------------------------------
构造函数当然可以是private 的了。
当你不允许构造出栈对象的时候就是个例子。
还有你的单态的那个例子,不也是这样的吗?
把构造函数和拷贝构造函数都声明为private 的,再用
static God * Instance(){ static God _GodInstance; return &_GodInstance; }
函数中定义一个局部static 的God 。Top
44 楼forverlove()回复于 2006-03-19 22:48:44 得分 0
更迷茫Top
45 楼Atomictry(天影)回复于 2006-03-20 08:50:57 得分 0
以前针对23种设计模式,我每个几乎写了两个例子,近期我整理一下。
到时我开帖,想要的留下邮箱。Top
46 楼Atomictry(天影)回复于 2006-03-20 08:53:23 得分 0
我靠,怎么转到c++板块了,这块地盘很少来走动。:(Top
47 楼jeffchen(Jeff)回复于 2006-03-23 11:17:22 得分 10
我说一下动物的创建方法,其他的和楼上各位的意见一致。
因为C++不具备C#、JAVA甚至是MFC等强大的RTTI功能,没有CreateInstance、CreateObject这些类自身生成类实例的方法。同时,如果使用switch语句的话,灵活性稍差。每增加一个动物子类都要增加相应的创建语句。
我的方法是使用模板,配合接口完成动物创建过程。设计如下:
// 增加一个“上帝之手”的接口,用于定义创建动物的接口。
// 上帝使用该接口创建动物。
class IHandOfGod
{
friend class CGod;
private:
//创建动物,只能由上帝调用
virtual CAnimal* CreateAnimal() =0;
};
// IHandOfGod创建接口的模板
template<class Animal>
class THandOfGod : public IHandOfGod
{
private:
virtual Animal* CreateAnimal()
{
return new Animal;
}
};
// 上帝
class CGod
{
public:
CGod(void)
{
};
public:
virtual ~CGod(void)
{
};
public:
// 使用创建接口,创建动物
CAnimal* CreateAnimal(IHandOfGod& hand)
{
return dynamic_cast<CAnimal*>(hand.CreateAnimal());
}
};
下面是动物的设计
class CAnimal
{
public:
CAnimal()
{
}
public:
virtual ~CAnimal(void)
{
}
public:
virtual const char* ToString() =0;
};
// 只能由THandOfGod<CDog>创建模板创建该类。
class CDog: public CAnimal
{
friend THandOfGod<CDog>; // 声明具体的创建模板是友元
protected:
CDog()
{
}
public:
virtual ~CDog(void)
{
}
public:
virtual const char* ToString()
{
return "Dog";
}
};
例子:
int main()
{
CGod god;
// 定义“狗”的创建模板实例
THandOfGod<CDog> hand;
// 使用“狗”的创建模板实例创建
CAnimal* lpAnimal=god.CreateAnimal(hand);
printf("%s\n",lpAnimal->ToString());
delete lpAnimal;
return 0;
}
这样就能满足只能由上帝创建动物,又能获得创建过程的灵活性。当增加新的动物子类时,声明创建模板,并使用即可,无须修改相关的创建代码。
Top
48 楼Helloooooo(每天,我都新的)回复于 2006-03-23 13:13:49 得分 0
这个题有创意Top
49 楼gjianpro(#ifndef _DEBUG)回复于 2006-03-23 13:27:36 得分 0
design patternsTop
50 楼shenmea00000(学习中~~~)回复于 2006-03-23 13:42:26 得分 0
真不错,很有收获~~~~~
谢谢楼主,谢谢各位啦,呵呵~~~~Top
51 楼yiyo2025(HenryKong)回复于 2006-03-23 13:47:00 得分 10
//动物
class Animal
{
public:
virtual void Run() = 0;
};
//猪
class Pig : public Animal
{
public:
void Run();
void Eat();
};
//狗
class Dog : public Animal
{
public:
void Run();
void Call();
};
//上帝,使用Singleton模式
class God
{
private:
static God *s_god;
public:
static God *GetGod()
{
if (s_god == NULL)
{
s_god = new God;
}
return s_god;
}
Animal *CreatePig()
{
return new Pig;
}
Animal *CreateDog()
{
return new Dog;
}
};
God *God::s_god = NULL;
Top
52 楼pomelowu(羽战士)回复于 2006-03-23 15:35:46 得分 0
又,animal构造函数private, friend class God
这不行的吧?构造函数比不得其他,无法虚拟的吧。。。难道我记错了?
继续拍:
private是私有,不是虚拟.
-------------------------------
构造函数当然可以是private 的了。
当你不允许构造出栈对象的时候就是个例子。
还有你的单态的那个例子,不也是这样的吗?
把构造函数和拷贝构造函数都声明为private 的,再用
static God * Instance(){ static God _GodInstance; return &_GodInstance; }
函数中定义一个局部static 的God 。
==========================
你们二位误会我的问题了。不过也是该拍的。像我一开始的代码,如果基类的构造函数为private,子类的构造函数也就private了。只不过如果基类的构造函数为protected。。。呵呵~我以为private和protected的效果一样。。。Top
53 楼xhbpla(沧浪之水)回复于 2006-03-23 16:09:47 得分 0
学习……Top
54 楼AmethystFeather(紫羽)回复于 2006-03-23 18:28:45 得分 0
新学者,我虽然对写代码还不行,但我想,"God"应该能为每个他创建的动物命名吧,不应该局限在猫猫狗狗里面..............是不是太深了?能实现吗?Top
55 楼fmilyfte(寂寞的帽子)回复于 2006-03-23 22:05:33 得分 0
刚学了类
想认真看一下
不过没时间了
呵呵
顶一下
不回复的孩子不是好孩子
Top
56 楼fmilyfte(寂寞的帽子)回复于 2006-03-23 22:11:35 得分 0
顺便
有谁懂黑吗
我很想做HACKER
只是没高人指导
现在还是白坯
喜欢挑战的高手朋友可以联络一下
QQ 357403866
谢谢Top
57 楼hacker813com(血色忧郁)回复于 2006-03-23 23:31:03 得分 0
markTop
58 楼SEUU(三枝花)回复于 2006-03-23 23:36:16 得分 0
太长啦,捞分吧.
还有,你的分多给我一点吧,我是来得分的,我只要星星!Top
59 楼lcb2008(安徽の刀)回复于 2006-03-24 00:13:29 得分 5
新近学习C++,看了楼上各位大虾的发言,收获不小。
偶也来胡乱涂鸦一番,敬请高手指正!
#include <iostream>
using namespace std;
class Animal;
class God;
class BaseHelper
{
friend God;
private:
virtual Animal * CreateInstance() = 0;
};
template <class T>
class GodHelper : public BaseHelper
{
private:
virtual T * CreateInstance() {
return new T();
}
};
class God
{
public:
static God * Instance() {
if ( !m_god )
m_god = new God();
return m_god;
}
Animal * CreateAnimal( BaseHelper& helper ) {
return helper.CreateInstance();
}
private:
God() {}
static God *m_god;
};
God * God::m_god = NULL;
class Animal
{
public:
virtual ~Animal() {}
virtual void Run() = 0;
virtual void Eat() = 0;
virtual void Bark() = 0;
protected:
Animal() {}
};
class Dog : public Animal
{
friend GodHelper<Dog>;
public:
virtual ~Dog() {}
virtual void Bark() { cout << "Dog bark\n"; }
virtual void Eat() { cout << "Dog eat\n"; }
virtual void Run() { cout << "Dog run\n"; }
protected:
Dog() {}
};
class Pig : public Animal
{
friend GodHelper<Pig>;
public:
virtual ~Pig() {}
virtual void Bark() { cout << "Pig bark\n"; }
virtual void Eat() { cout << "Pig eat\n"; }
virtual void Run() { cout << "Pig run\n"; }
protected:
Pig() {}
};
int main()
{
God *god = God::Instance();
Animal *dog = god->CreateAnimal(GodHelper<Dog>());
dog->Run();
dog->Bark();
dog->Eat();
Animal *pig = god->CreateAnimal(GodHelper<Pig>());
pig->Run();
pig->Bark();
pig->Eat();
system("pause");
delete god;
}Top
60 楼lcb2008(安徽の刀)回复于 2006-03-24 00:16:20 得分 0
汗,最后漏了两句:
delete dog;
delete pig;Top
61 楼kokcc()回复于 2006-03-24 01:05:07 得分 0
汗...Top
62 楼Atomictry(天影)回复于 2006-03-24 08:46:17 得分 0
如果大家对设计模式有兴趣,我觉得对于入门基础知识,在网上多看看别人关于设计模式的介绍就可以了。
等觉得自己有点思想的时候,看看源代码,www.codeproject.com中就有,经常去溜溜很有帮助。
等到想系统了解的时候,就非滴看那几个牛比人写的设计模式的书了。
希望对大家有帮助。Top
63 楼jiayi613(逆天)回复于 2006-03-24 09:04:14 得分 0
up,有这么多大侠指点,多学多学。谢了谢了Top
64 楼fdimim(猿莫求愚√))回复于 2006-03-24 10:02:19 得分 0
markTop
65 楼abblly(西边日出东边雨)回复于 2006-03-24 10:24:10 得分 0
刚看起来好像很简单,看了大家的回帖才知道挺多值得学习的地方,mark一下,有时间再仔细看。Top
66 楼hansin(将冰山劈开)回复于 2006-03-24 10:35:41 得分 0
怎么不见带星的总结一下啊。。Top
67 楼september___29()回复于 2006-03-24 10:42:36 得分 0
设计模式的问题Top
68 楼KDE(黎明)回复于 2006-03-24 10:57:21 得分 0
如果我的思路没有错误的话,应该是这样:
1、上帝是个Singlton,且是个Animal的Factory。
2、Animal是Dog和Pig的抽象接口父类。
3、Dog和Pig是Animal派生类,并且constructor是私有的,但对于上帝这个Factory是
friend。
4、Animal只实现“跑”。而Dog和Pig个自从Animal派生并实现“叫”或“吃”。
结果,就是上帝只有1个,并且只有上帝可以制造动物(包括狗和猪),狗可以“跑”和“叫”,猪可以“跑”和“吃”。Top
69 楼S_G_D(紫色)回复于 2006-03-24 11:05:46 得分 0
I think the very point is that only the god can creat animals,so we should notice the animal's structure and destroy functions in "protected".
There is a song I liked that named "God is a girl",so I think that god couldn't likes killing.
That's all.Top
70 楼Jchangcheng(长城)回复于 2006-03-24 15:47:09 得分 0
这怎么像是见过.
在中山大学的视频教程中有点其中的东西.Top
71 楼aya331(菜菜小鸟)回复于 2006-03-25 16:02:03 得分 0
但是除了God可以创造DOG、PIG,那么别人怎么使用这些动物呢?这些动物的实例有是什么呢?Top
72 楼wofish2()回复于 2006-03-31 14:39:22 得分 0
mark
Top
73 楼cdef9108()回复于 2006-05-09 23:05:11 得分 0
学习,还要继续学习Top




