从类开始,C++的思维方式就和C的不一样了,搞的我比较晕。看完了类,接下来的是继承这个很牛AC的属性。 根据魔兽HUM的农民写了个小程序,来实践实践,没有实践,理论没法掌握的。 #include <iostream> using namespace std; /**********************************************************************/ class Miners //定义简单的矿工类 { public: //公共属性 Miners(); //简单的构造函数 virtual ~Miners(); //简单的析构函数 void DispInfo(Miners *miner); //显示信息 void SetSpeed(int speed); //设置移动速度 void SetLength(int length); //设置长度 void SetHeight(int height); //设置高度 void SetLife(int height); //设置生命值 int GetSpeed(void); //获取移动速度 int GetLength(void); //获取长度 int GetHeight(void); //获取高度 int GetLife(void); //获取生命值 virtual void Attack(void); //定义成虚函数等待被覆盖 private: //私有属性 protected: //保护属性 int Speed; //速度 int Length; //长度 int Height; //高度 int Life; //生命值 }; Miners::Miners() //简单的构造函数 { cout << "Miners constructor..." << endl; SetSpeed(5); SetLength(15); SetHeight(15); SetLife(200); } Miners::~Miners() //简单的析构函数 { cout << "Miners destructor..." << endl; } // 传指针进来,传值的话会引发再次定义一个对象事件 void Miners::DispInfo(Miners *miner) //显示信息 { cout << "-- Display Info --" << endl; cout << "Speed : " << miner->Speed << endl; cout << "Length: " << miner->Length << endl; cout << "Height: " << miner->Height << endl; cout << "Life : " << miner->Life << endl; cout << "------------------" << endl; } void Miners::SetSpeed(int speed) //设置速度 { cout << "Miners::SetSpeed" << endl; Speed = speed; } void Miners::SetLength(int length) //设置长度 { cout << "Miners::SetLength" << endl; Length = length; } void Miners::SetHeight(int height) //设置高度 { cout << "Miners::SetHeight" << endl; Height = height; } void Miners::SetLife(int life) //设置生命值 { cout << "Miners::SetLife" << endl; Life = life; } int Miners::GetSpeed() //获取速度 { cout << "Miners::GetSpeed" << endl; return Speed; } int Miners::GetLength() //获取长度 { cout << "Miners::GetLength" << endl; return Length; } int Miners::GetHeight() //获取高度 { cout << "Miners::GetHeight" << endl; return Height; } int Miners::GetLife() //获取生命值 { cout << "Miners::GetLife" << endl; return Life; } void Miners::Attack(void) { cout << "Miners::Attack" << endl; } /**********************************************************************/ class FootMan : public Miners //定义步兵类,公有派生自矿工类 { public: FootMan(); virtual ~FootMan(); virtual void Attack(void); /*定义为虚函数,但覆盖了Miners的Attack函数*/ void PutUpShield(void); void PutDownShield(void); int GetShield(void); private: int Shield; protected: }; FootMan::FootMan() { cout << "FootMan constructor..." << endl; SetSpeed(8); SetLength(20); SetLife(350); } FootMan::~FootMan() { cout << "FootMan destructor..." << endl; } void FootMan::Attack(void) { cout << "FootMan::Attack" << endl; } void FootMan::PutUpShield(void) { cout << "FootMan::PutUpShield" << endl; Shield = 1; } void FootMan::PutDownShield(void) { cout << "FootMan::PutDownShield" << endl; Shield = 0; } int FootMan::GetShield(void) { cout << "FootMan::GetShield" << endl; return Shield; } /**********************************************************************/ void ValueFunction (Miners temp) { temp.Attack(); //值传递的情况下派生类的方法被切除了 } /**********************************************************************/ int main(int argc , char *argv[]) //主函数 { //Miners miner01; //定义矿工1号 //FootMan footman01; //定义步兵1号 Miners *miner02 = new FootMan; /*定义一个具有步兵属性的矿工,new申请的内存要释放掉*/ /*----------------------*/ /* 显示信息 改变信息 显示改变后的信息 */ //miner01.DispInfo(&miner01); /*----------------------*/ /*----------------------*/ //footman01.DispInfo(&footman01); //footman01.PutUpShield(); /*----------------------*/ /*----------------------*/ miner02->DispInfo(miner02); //miner02->PutUpShield(); /* 武装矿工不能用盾牌,编译不过 * 在矿工类中没有这个功能*/ miner02->Attack(); //ValueFunction(*miner02); delete miner02; //释放掉new申请的内存 /*----------------------*/ return 0; }