多态的几个小练习

练习一

#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() << "\t"<<"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() << "\t"<<"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;
}

c++-多态的练习的更多相关文章

  1. Java中的多态

    1.多态:具有表现多种形态的能力的特征 父类: public abstract class Animal {public abstract void Say();} 子类: public class ...

  2. C# 工厂模式+虚方法(接口、抽象方法)实现多态

    面向对象语言的三大特征之一就是多态,听起来多态比较抽象,简而言之就是同一行为针对不同对象得到不同的结果,同一对象,在不同的环境下得到不同的状态. 实例说明: 业务需求:实现一个打开文件的控制台程序的d ...

  3. C#非常重要基础之多态

    前几天看了一位同志的博客,写的是关于他自己去支付宝面试的经历.过程大体是这样的:问答的时候,前面部分,作者都应答如流,说起自己经验如何之丰富,最后面试官问了作者一个问题:请简述多态的概念和作用.结果这 ...

  4. C++多态详解

    多态是面向对象的程序设计的关键技术.多态:调用同一个函数名,可以根据需要但实现不同的功能.多态体现在两个方面,我们以前学过的编译时的多态性(函数重载)和现在我们这一章将要学习的运行时的多态性(虚函数) ...

  5. 【那些年关于java多态应用】

    1.多态:具有表现多种形态的能力的特征 父类: public abstract class Animal { public abstract void Say();} 子类: public class ...

  6. JAVA多态

    多态是指当系统A访问系统B的服务时,系统B可以通过多种方式来提供服务,而这一切对系统A是透明的.比如动物园的饲养员能够给各种各样的动物喂食.下图显示了饲养员Feeder,食物Food和动物Animal ...

  7. C#多态“说来也说”——逻辑层BLL中的多态使用

    本文版权归博客园和作者吴双本人共同所有.欢迎转载,转载和爬虫请注明原文地址 http://www.cnblogs.com/tdws/p/5861842.html 昨天晚上,有个朋友说学了好久,依然没搞 ...

  8. java多态的理解

    面向对象语言中的类有三个特征,封装.继承.多态.封装与继承很好理解,那什么是多态呢? 1.什么是多态? 多态的定义:指允许不同类的对象对同一消息做出响应.即同一消息可以根据发送对象的不同而采用多种不同 ...

  9. java中如何实现多态

    复习基础知识 多态,就是重载和重写.重载发生在一个类中.重写发生在子类,意思就是子类重写父类相同名称的方法.刚学语言有的东西,不必搞得那么清楚,只有知道怎么用就行了,有的问题你要想真正把它搞得很懂,短 ...

  10. OC多态

    要点: 1.多种形态,引用的多种形态对于一个引用变量,可以指向任何类的对象.对于一个父类的引用(类与类之间有一种继承关系),可以指向子类,也可以指向本类,指向的类型不同.当通过此引用向对象发送消息,调 ...

随机推荐

  1. Kylin的安装及遇到的问题

    ************************************************************************************************ 首先, ...

  2. 软件测试必须掌握的抓包工具Wireshark,你会了么?

    作为软件测试工程师,大家在工作中肯定经常会用到各种抓包工具来辅助测试,比如浏览器自带的抓包工具-F12,方便又快捷:比如时下特别流行的Fiddler工具,使用各种web和APP测试的各种场景的抓包分析 ...

  3. mybatis源码学习(三)-一级缓存二级缓存

    本文主要是个人学习mybatis缓存的学习笔记,主要有以下几个知识点 1.一级缓存配置信息 2.一级缓存源码学习笔记 3.二级缓存配置信息 4.二级缓存源码 5.一级缓存.二级缓存总结 1.一级缓存配 ...

  4. 程序员的算法课(20)-常用的图算法:最小生成树(MST)

    版权声明:本文为博主原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明. 本文链接:https://blog.csdn.net/m0_37609579/article/de ...

  5. Linux机器相互登录

    1周第4次课(3月22日)课程内容: 1.16 Linux机器相互登录 Linux相互登录可以分2种方式,一种为ssh +IP地址,然后输入对应的root密码,一种为密钥验证方式,其中一台机器放公钥, ...

  6. PHP 获取服务器详细信息的原生方法

    获取系统类型及版本号:    php_uname()     (例:Windows NT PCA15130 6.1 build 7601 (Windows 7 Ultimate Edition Ser ...

  7. Spring Cloud Hoxton正式发布,Spring Boot 2.2 不再孤单

    距离Spring Boot 2.2.0的发布已经有一个半月左右时间,由于与之匹配的Spring Cloud版本一直没有Release,所以在这期间碰到不少读者咨询的问题都是由于Spring Boot和 ...

  8. springboot整合activiti

    1.第一步添加bpmn文件得插件,不然没法查看和编辑bpmn文件,添加插件的方法各自百度即可,很简单 2.安装好bpmn插件后开始新建bpmn文件,也就是画流程图 一般是在代码中进行指定流程审批人的, ...

  9. iOS 手势及触摸

    转自:http://justsee.iteye.com/blog/1885538 一.响应链 在IOS开发中会遇到各种操作事件,通过程序可以对这些事件做出响应. 首先,当发生事件响应时,必须知道由谁来 ...

  10. 第六章 jQuery选择器

    jQuery选择器概述: 选择器jQuery基础,在jQuery中,对事件处理,遍历DOM和Ajax操作都依赖于选择器. 什么是jQuery选择器: jQuery选择器拥有良好的浏览器兼容性,不用使用 ...