zoukankan      html  css  js  c++  java
  • c++-多态的练习

    多态的几个小练习

    练习一

    #include <iostream>
    #include <string>
    using namespace std;
    
    
    class Fu
    {
    public:
    	Fu(string name)
    	{
    		this->name = name;
    	}
    	virtual void func()
    	{
    		cout << "调用了Fu的函数"<<endl;
    		cout<<"Fu " << name <<" func()"<< endl;
    
    	}
    	string name;
    };
    class Zi :public Fu
    {
    	public:
    	Zi(string name):Fu(name)
    	{
    	}
    	void func()
    	{
    		cout << "调用了Zi的函数" << endl;
    		cout << "Zi " << name << " func()"<< endl;
    	}
    	
    };
    class Zi2 :public Fu
    {
    	public:
    	Zi2(string name) : Fu(name)
    	{
    		
    
    	}
    	void func()
    	{
    		cout << "调用了Zi2的函数" << endl;
    		cout << "Zi2 "<< name << " func()" << endl;
    	}
    };
    class Sun :public Zi
    {
    	public:
    	Sun(string name) : Zi(name)
    	{
    	}
    	void func()
    	{
    		cout << "调用了Sun的函数" << endl;
    		cout << "Sun " << name << " func()"<<endl;
    	}
    
    };
    void fun(Fu &f)
    {
    	f.func();//在此处应该发生多态
    
    }
    int main()
    {
    	Fu f("FFFF");
    	Zi z("ZZZZ");
    	Zi2 z2("TTTT");
    	Sun s("SSSS");
    	fun(f);
    	fun(z);
    	fun(z2);
    	fun(s);
    	return 0;
    }
    
    

    练习二

    #include <iostream>
    #include <string>
    using namespace std;
    
    
    class Fu
    {
    public:
    	Fu(string name)
    	{
    		this->name = name;
    	}
    	virtual void func()
    	{
    		cout << "调用了Fu的函数"<<endl;
    		cout<<"Fu " << name <<" func()"<< endl;
    
    	}
    	string name;
    };
    class Zi :public Fu
    {
    	public:
    	Zi(string name):Fu(name)
    	{
    	}
    	void func()
    	{
    		cout << "调用了Zi的函数" << endl;
    		cout << "Zi " << name << " func()"<< endl;
    	}
    	
    };
    class Zi2 :public Fu
    {
    	public:
    	Zi2(string name) : Fu(name)
    	{
    		
    
    	}
    	void func()
    	{
    		cout << "调用了Zi2的函数" << endl;
    		cout << "Zi2 "<< name << " func()" << endl;
    	}
    };
    class Sun :public Zi
    {
    	public:
    	Sun(string name) : Zi(name)
    	{
    	}
    	void func()
    	{
    		cout << "调用了Sun的函数" << endl;
    		cout << "Sun " << name << " func()"<<endl;
    	}
    
    };
    void fun(Fu &f)
    {
    	f.func();//在此处应该发生多态
    
    }
    int main()
    {
    	Fu f("FFFF");
    	Zi z("ZZZZ");
    	Zi2 z2("TTTT");
    	Sun s("SSSS");
    	fun(f);
    	fun(z);
    	fun(z2);
    	fun(s);
    	return 0;
    }
    
    

    练习三

    #define _CRT_SECURE_NO_WARNINGS
    #include <iostream>
    #include <string>
    using namespace std;
    
    //把大象关进冰箱
    //冰箱类
    class IceBox
    {
    protected:
    	int size;//冰箱的容积
    public:
    	IceBox(int size)
    	{
    		this->size = size;
    	}
    	virtual int getSize()
    	{
    		return this->size;
    	}
    };
    
    class Animal
    {
    protected:
    	int size;
    public:
    	Animal(int size)
    	{
    		this->size = size;
    	}
    	virtual int getSize()
    	{
    		return this->size;
    	}
    
    };
    //大象类
    class Elephent:public Animal
    {
    private:
    	string name;
    public:
    	Elephent(int size, string name) :Animal(size)
    	{
    		this->name = name;
    	}
    	virtual int getESize()
    	{
    		return this->size;
    	}
    	string getName()
    	{
    		return this->name;
    	}
    };
    
    class Geli:public IceBox
    {
    private:
    	string name;
    public:
    	
    	Geli(int size , string name) :IceBox(size)
    	{
    		this->name = name;
    	}
    	virtual int getSize()
    	{
    		return this->size;
    	}
    	string getName()
    	{
    		return this->name;
    	}
    };
    
    void putEleIntoBox(IceBox *ib, Animal *an)
    {
    	if (ib->getSize() > an->getSize())
    	{
    		cout << "把动物装进去了" << endl;
    	}
    	else
    	{
    		cout << "动物卡住了" << endl;
    	}
    }
    int main()
    {
    	
    	IceBox ib(100);
    	Animal an(200);
    
    
    	putEleIntoBox(&ib, &an);
    
    	Elephent *ep = new Elephent(200, "非洲象");
    	Geli *DongMZ = new Geli(300, "geli");
    
    	putEleIntoBox(DongMZ, ep);
    	system("pause");
    	return 0;
    }
    

    练习四

    #define _CRT_SECURE_NO_WARNINGS
    #include"iostream"
    using namespace std;
    
    class Programmer
    {
    public:
    	virtual int salaryPerMonth()=0;
    	virtual char * getName()=0;
    };
    
    class CppProgrammer :public Programmer
    {
    public:
    	virtual int salaryPerMonth()
    	{
    		return 20000;
    	}
    	virtual char *  getName()
    	{
    		return "CppProgrammer";
    	}
    
    };
    
    class PhpProgrammer :public Programmer
    {
    public:
    	virtual int salaryPerMonth()
    	{
    		return 10000;
    	}
    	virtual char *  getName()
    	{
    		return "PhpProgrammer";
    	}
    
    };
    
    class JavaProgrammer :public Programmer
    {
    public:
    	virtual int salaryPerMonth()
    	{
    
    		return 15000;
    	}
    	virtual char *  getName()
    	{
    		return "JavaProgrammer";
    	}
    };
    
    class Girl
    {
    public:
    	virtual int Beauty()
    	{
    
    	}
    	virtual char *  getName() {
    
    	}
    
    };
    
    class BaiFuMei : public Girl
    {
    public:
    	virtual int Beauty()
    	{
    		return 19999;
    	}
    	virtual char *  getName()
    	{
    		return "BaiFuMei";
    	}
    
    
    };
    
    class NvDiaoSi : public Girl
    {
    public:
    	virtual int Beauty()
    	{
    		return 11000;
    	}
    	virtual char *  getName()
    	{
    		return "NvDiaoSi";
    	}
    
    
    };
    
    class FengJie : public Girl
    {
    public:
    	virtual int Beauty()
    	{
    		return 14000;
    	}
    	virtual char *  getName()
    	{
    		return "FengJie";
    	}
    
    };
    
    
    
    void Marry(Programmer &pp, Girl &gg)
    {
    	if (pp.salaryPerMonth() > gg.Beauty())
    	{
    		cout << pp.getName() << "	"<<"will marry   "<<gg.getName() << endl;
    	}
    	else
    
    	{
    		cout << "hey  " << pp.getName() << "  don't make a day dream! you want to marry to  " << gg.getName() <<"??"<< endl;
    	}
    }
    
    int main()
    {
    	CppProgrammer cpp;
    	PhpProgrammer php;
    	JavaProgrammer java;
    	BaiFuMei bfm;
    	NvDiaoSi nds;
    	FengJie fj;
    	Marry(cpp, bfm);
    	Marry(php, bfm);
    	Marry(java, bfm);
    
    	Marry(php, nds);
    	Marry(java, bfm);
    
    	
    	Marry(java, fj);
    
    	system("pause");
    	return 0;
    }
    

    练习五

    #define _CRT_SECURE_NO_WARNINGS
    #include"iostream"
    using namespace std;
    
    class Programmer
    {
    public:
    	virtual int salaryPerMonth()=0;
    	virtual char * getName()=0;
    };
    
    class CppProgrammer :public Programmer
    {
    public:
    	virtual int salaryPerMonth()
    	{
    		return 20000;
    	}
    	virtual char *  getName()
    	{
    		return "CppProgrammer";
    	}
    
    };
    
    class PhpProgrammer :public Programmer
    {
    public:
    	virtual int salaryPerMonth()
    	{
    		return 10000;
    	}
    	virtual char *  getName()
    	{
    		return "PhpProgrammer";
    	}
    
    };
    
    class JavaProgrammer :public Programmer
    {
    public:
    	virtual int salaryPerMonth()
    	{
    
    		return 15000;
    	}
    	virtual char *  getName()
    	{
    		return "JavaProgrammer";
    	}
    };
    
    class Girl
    {
    public:
    	virtual int Beauty()
    	{
    
    	}
    	virtual char *  getName() {
    
    	}
    
    };
    
    class BaiFuMei : public Girl
    {
    public:
    	virtual int Beauty()
    	{
    		return 19999;
    	}
    	virtual char *  getName()
    	{
    		return "BaiFuMei";
    	}
    
    
    };
    
    class NvDiaoSi : public Girl
    {
    public:
    	virtual int Beauty()
    	{
    		return 11000;
    	}
    	virtual char *  getName()
    	{
    		return "NvDiaoSi";
    	}
    
    
    };
    
    class FengJie : public Girl
    {
    public:
    	virtual int Beauty()
    	{
    		return 14000;
    	}
    	virtual char *  getName()
    	{
    		return "FengJie";
    	}
    
    };
    
    
    
    void Marry(Programmer &pp, Girl &gg)
    {
    	if (pp.salaryPerMonth() > gg.Beauty())
    	{
    		cout << pp.getName() << "	"<<"will marry   "<<gg.getName() << endl;
    	}
    	else
    
    	{
    		cout << "hey  " << pp.getName() << "  don't make a day dream! you want to marry to  " << gg.getName() <<"??"<< endl;
    	}
    }
    
    int main()
    {
    	CppProgrammer cpp;
    	PhpProgrammer php;
    	JavaProgrammer java;
    	BaiFuMei bfm;
    	NvDiaoSi nds;
    	FengJie fj;
    	Marry(cpp, bfm);
    	Marry(php, bfm);
    	Marry(java, bfm);
    
    	Marry(php, nds);
    	Marry(java, bfm);
    
    	
    	Marry(java, fj);
    
    	system("pause");
    	return 0;
    }
    

    练习六

    #define _CRT_SECURE_NO_WARNINGS
    #include <iostream>
    
    
    using namespace std;
    
    //
    
    class  Girl
    {
    public:
    
    	int  fangyu()
    	{
    		return 10;
    	}
    
    };
    
    
    class Boy
    {
    public:
    	virtual int fight()
    	{
    		return 5;
    	}
    
    };
    
    class higBoy:public Boy
    {
    public:
    	virtual int fight()
    	{
    		return 10;
    	}
    
    };
    
    class bugBoy :public Boy
    {
    public:
    	virtual int fight()
    	{
    		return 20;
    	}
    
    };
    
    //战斗方法
    void catchGirl(Boy &bp, Girl &mp)
    {
    	if (bp.fight() > mp.fangyu()) { //hp->getAd 发生了多态
    		cout << "女孩被追到了" << endl;
    	}
    	else {
    		cout << "没追到" << endl;
    	}
    }
    
    
    int main(void)
    {
    
    	Girl mp;
    
    	Boy b1;
    	higBoy b2;
    	bugBoy b3;
    
    	catchGirl(b1, mp);
    	catchGirl(b2, mp);
    	catchGirl(b3, mp);
    
    
    	// system("pause");
    	return 0;
    }
    

    练习七

    #define _CRT_SECURE_NO_WARNINGS
    #include <iostream>
    #include <string>
    #include <cstdlib>
    
    using namespace std;
    
    
    class Person
    {
    public:
    	Person(char * name,int age)
    	{
    		this->name = name;
    		this->age = age;
    	}
    	virtual void aryYouOK()
    	{
    		cout << "name: " << this->name << endl;
    		cout << "age: " << this->age << endl;
    	}
    	string getName()
    	{
    		return name;
    	}
    	int getAge()
    	{
    		return age;
    	}
    private:
    	string name;
    	int age;
    };
    
    class Teacher : public Person
    {
    public:
    	Teacher(char * name, int age, int wage) :Person(name, age)
    	{
    		this->wage = wage;
    	}
    	virtual void aryYouOK()
    	{
    		Person::aryYouOK();
    		cout << "wage:" << this->wage << endl;
    	}
    private:
    	int wage;
    };
    
    class Student:public Person
    {
    public:
    	Student(char * name, int age, char * work) :Person(name, age)
    	{
    		this->work = work;
    	}
    	virtual void aryYouOK()
    	{
    		Person::aryYouOK();
    		cout << "work:" << this->work << endl;
    	}
    private:
    	string work;
    };
    
    void seeHello(Person & p)
    {
    	p.aryYouOK();
    }
    
    
    int main(void)
    {
    	Student stu("Íõ¶þ¹·", 18, "ѧϰ");
    
    	Teacher tea("°×½à",22, 8000);
    	
    	seeHello(stu);
    	cout << endl;
    	seeHello(tea);
    
    
    	cout << endl;
    	// system("pause");
    	return 0;
    }
    

    练习八

    #define _CRT_SECURE_NO_WARNINGS
    #include <iostream>
    #include <string>
    #include <cstdlib>
    
    using namespace std;
    
    
    class Person
    {
    public:
    	Person(char * name,int age)
    	{
    		this->name = name;
    		this->age = age;
    	}
    	virtual void aryYouOK()
    	{
    		cout << "name: " << this->name << endl;
    		cout << "age: " << this->age << endl;
    	}
    	string getName()
    	{
    		return name;
    	}
    	int getAge()
    	{
    		return age;
    	}
    private:
    	string name;
    	int age;
    };
    
    class Teacher : public Person
    {
    public:
    	Teacher(char * name, int age, int wage) :Person(name, age)
    	{
    		this->wage = wage;
    	}
    	virtual void aryYouOK()
    	{
    		Person::aryYouOK();
    		cout << "wage:" << this->wage << endl;
    	}
    private:
    	int wage;
    };
    
    class Student:public Person
    {
    public:
    	Student(char * name, int age, char * work) :Person(name, age)
    	{
    		this->work = work;
    	}
    	virtual void aryYouOK()
    	{
    		Person::aryYouOK();
    		cout << "work:" << this->work << endl;
    	}
    private:
    	string work;
    };
    
    void seeHello(Person & p)
    {
    	p.aryYouOK();
    }
    
    
    int main(void)
    {
    	Student stu("Íõ¶þ¹·", 18, "ѧϰ");
    
    	Teacher tea("°×½à",22, 8000);
    	
    	seeHello(stu);
    	cout << endl;
    	seeHello(tea);
    
    
    	cout << endl;
    	// system("pause");
    	return 0;
    }
    

    练习九

    #define _CRT_SECURE_NO_WARNINGS
    #include <iostream>
    #include <string>
    #include <cstdlib>
    
    using namespace std;
    
    
    class Person
    {
    public:
    	Person(char * name,int age)
    	{
    		this->name = name;
    		this->age = age;
    	}
    	virtual void aryYouOK()
    	{
    		cout << "name: " << this->name << endl;
    		cout << "age: " << this->age << endl;
    	}
    	string getName()
    	{
    		return name;
    	}
    	int getAge()
    	{
    		return age;
    	}
    private:
    	string name;
    	int age;
    };
    
    class Teacher : public Person
    {
    public:
    	Teacher(char * name, int age, int wage) :Person(name, age)
    	{
    		this->wage = wage;
    	}
    	virtual void aryYouOK()
    	{
    		Person::aryYouOK();
    		cout << "wage:" << this->wage << endl;
    	}
    private:
    	int wage;
    };
    
    class Student:public Person
    {
    public:
    	Student(char * name, int age, char * work) :Person(name, age)
    	{
    		this->work = work;
    	}
    	virtual void aryYouOK()
    	{
    		Person::aryYouOK();
    		cout << "work:" << this->work << endl;
    	}
    private:
    	string work;
    };
    
    void seeHello(Person & p)
    {
    	p.aryYouOK();
    }
    
    
    int main(void)
    {
    	Student stu("Íõ¶þ¹·", 18, "ѧϰ");
    
    	Teacher tea("°×½à",22, 8000);
    	
    	seeHello(stu);
    	cout << endl;
    	seeHello(tea);
    
    
    	cout << endl;
    	// system("pause");
    	return 0;
    }
    
  • 相关阅读:
    Mobox企业网盘回收站文件清空与恢复的管控
    NAS设备部署后采用Mobox企业云盘来提升管理功能
    企业网盘支持对象存储帮助用户推行私有云
    阿里云登录界面无法输入账号及密码的解决方法
    团队协作管理-任务追踪管理
    windows10 家庭版 无法远程2012的解决
    bat删除多少天前的文件包含子目录
    企业网盘居然支持高速局域网文件传输工具(速度可达20M)
    防范永恒之蓝勒索病毒-XP、Win10文件共享怎样设置
    【OpenGL】学习笔记#2
  • 原文地址:https://www.cnblogs.com/ygjzs/p/12079018.html
Copyright © 2011-2022 走看看