C++下实现同接口下多个类作为参数的调用和传参

  1 /*
  2          实现同接口下不同类的对象的转移
  3         定义类的接口
  4         定义多个继承该接口的类
  5         定义管理类,把接口当作类型,
  6         传入该接口下各种类的对象,进行操作
  7 */
  8 #include<iostream>
  9 #include<map>
 10 #include<cstdlib>
 11 using namespace std;
 12 template<typename keyType,typename valueType>
 13 struct Node{
 14     keyType key;
 15     valueType value;
 16     Node *next;
 17 };
 18 template<typename keyType,typename valueType>
 19 class List
 20 {
 21     public:
 22         List()
 23         {
 24             tail=accom=mallocmemory();//initialize head node
 25         }
 26         void Add(keyType key,valueType value){
 27             Node<keyType,valueType> *nd=mallocmemory();
 28             nd->key=key;
 29             nd->value=value;
 30             tail->next=nd;
 31             tail=tail->next;
 32         }
 33         valueType Get(keyType key,bool del=false)
 34         {
 35             Node<keyType,valueType> *record,*temp=accom->next;
 36             valueType t;
 37             while(temp!=NULL&&temp->key!=key)
 38             {
 39                 temp=temp->next;
 40             }
 41             t=temp->value;
 42             if(del)
 43             {
 44                 record=accom;
 45                 while(record->next!=temp)
 46                 record=record->next;
 47                 record=temp->next;
 48                 free(temp);
 49             }
 50             return t;
 51         }
 52         bool Exist(keyType key)
 53         {
 54             Node<keyType,valueType> *temp=accom->next;
 55             while(temp!=NULL&&temp->key!=key)
 56             {
 57                 temp=temp->next;
 58             }
 59             if(temp==NULL)
 60             return false;
 61             return true;
 62         }
 63         valueType RemoveById(keyType id)
 64         {
 65             return Get(id,true);
 66         }
 67     private:
 68         Node<keyType ,valueType> *mallocmemory(){
 69             Node<keyType,valueType> *nd=(Node<keyType,valueType>*)malloc(sizeof(Node<keyType,valueType>));
 70             nd->next=NULL;
 71             return nd;
 72         }
 73         Node<keyType,valueType> *accom,*tail;
 74 };
 75 class IPerson{
 76     public:
 77         virtual void SetName(string name)=0;
 78         virtual void SetAge(int age)=0;
 79         virtual void ShowInfo()=0;
 80 };
 81 class Student:public IPerson
 82 {
 83     public:
 84         void SetName(string name)
 85         {
 86             Name=name;
 87         }
 88         void SetAge(int age)
 89         {
 90             Age=age;
 91         }
 92         void ShowInfo()
 93         {
 94             cout<<"学生信息:"<<endl;
 95             cout<<"\tName: "<<Name<<endl;
 96             cout<<"\tAge : "<<Age<<endl;
 97         }
 98     private:
 99         string Name;
100         int Age;
101 };
102 class Parent:public IPerson
103 {
104     public:
105         void SetName(string name)
106         {
107             Name=name;
108         }
109         void SetAge(int age)
110         {
111             Age=age;
112         }
113         void ShowInfo()
114         {
115             cout<<"家长信息:"<<endl;
116             cout<<"\tName: "<<Name<<endl;
117             cout<<"\tAge : "<<Age<<endl;
118         }
119     private:
120         string Name;
121         int Age;
122 };
123 class Teacher:public IPerson
124 {
125     public:
126         void SetName(string name)
127         {
128             Name=name;
129         }
130         void SetAge(int age)
131         {
132             Age=age;
133         }
134         void ShowInfo()
135         {
136             cout<<"老师信息:"<<endl;
137             cout<<"\tName: "<<Name<<endl;
138             cout<<"\tAge : "<<Age<<endl;
139         }
140     private:
141         string Name;
142         int Age;
143 };
144 class Manager{
145     public:
146         Manager()
147         {
148             curPer=NULL;
149         }
150         void SetName(string name)
151         {
152             curPer->SetName(name);
153         }
154         void SetAge(int age)
155         {
156             if(curPer==NULL)cout<<"农夫"<<endl;
157             else
158             curPer->SetAge(age);
159         }
160         void ShowInfo()
161         {
162             curPer->ShowInfo();
163         }
164         void AddPeople(int id,IPerson *person)
165         {
166             per.Add(id,person);
167         }
168         void ChangeState(int id)
169         {
170             if(per.Exist(id))
171             curPer=per.Get(id);
172             else
173             cout<<"没有找到这个栈"<<endl;
174         }
175     private:
176         List<int,IPerson*> per;
177         IPerson *curPer;
178 };
179 int main()
180 {
181     Parent one;
182     Student stu;
183     Teacher tea;
184     Manager manage;
185     manage.AddPeople(1,&one);
186     manage.AddPeople(2,&stu);
187     manage.AddPeople(3,&tea);
188
189     manage.ChangeState(1);
190     manage.SetAge(19);
191     manage.SetName("jiazhang");
192
193     manage.ChangeState(2);
194     manage.SetAge(22);
195     manage.SetName("xuesheng");
196
197     manage.ChangeState(3);
198     manage.SetAge(21);
199     manage.SetName("laoshi");
200     for(int i=3;i>0;i--) {
201     manage.ChangeState(i);
202     manage.ShowInfo();}
203
204     return 0;
205 } 
时间: 2024-08-28 05:06:21

C++下实现同接口下多个类作为参数的调用和传参的相关文章

C#进阶系列——WebApi 接口参数不再困惑:传参详解

C#进阶系列--WebApi 接口参数不再困惑:传参详解

WebApi 接口参数不再困惑:传参详解

转自:http://www.cnblogs.com/landeanfen/p/5337072.html 阅读目录 一.get请求 1.基础类型参数 2.实体作为参数 3.数组作为参数 4.“怪异”的get请求 二.post请求 1.基础类型参数 2.实体作为参数 3.数组作为参数 4.后台发送请求参数的传递 三.put请求 1.基础类型参数 2.实体作为参数 3.数组作为参数 四.delete请求 五.总结 正文 前言:还记得刚使用WebApi那会儿,被它的传参机制折腾了好久,查阅了半天资料.如

Cisco 6509 万M接口下使用Qos进行限速

在万M接口下限制速度为2G 超过2G部分全drop ip access-list standard Limit-2G permit any class-map match-all Limit-2G  match access-group name Limit-2G policy-map Limit-2G  class Limit-2G   police 2000000000 65535    conform-action transmit     exceed-action drop inter

面向对象基础之抽象类与接口 下

在上篇博文中我们一起了解了抽象类,那么什么是接口呢?下面给大家简单介绍一下: 所谓接口,就是把隐式公共方法和属性组合起来,以封装特定功能的一个集合.一旦类实现了接口,类就可以支持接口所指定的所有属性和成员.声明接口在语法上与声明抽象类完全相同,但不允许提供接口中任何成员的执行方式,因此接口不能实例化,不能有构造方法和字段,不能有修饰符,如public等.在实现接口的类中必须实现接口中的所有方法和属性. 一个接口可以支持多个接口,多个类也可以支持相同的接口.需要注意的是,接口用interface关

bugzilla4的xmlrpc接口api调用实现分享: xmlrpc + https + cookies + httpclient +bugzilla + java实现加密通信下的xmlrpc接口调用并解决登陆保持会话功能

xmlrpc .  https . cookies . httpclient.bugzilla . java实现加密通信下的xmlrpc接口调用并解决登陆保持会话功能,网上针对bugzilla的实现很少,针对xmlrpc的有但是基本都是http协议的,https下的认证处理比较麻烦,而且会话保持也是基本没有太多共享,所以本人决定结合xmlrpc\bugzilla官方文档,网友文章,结合个人经验总结而成,已经在window2007 64+jdk7位机器上调试通过 手把手教你如何实现: 第一步: 在

MVP模式(2) 你真的理解下抽象类和接口吗??

转载请注明出处:王亟亟的大牛之路 礼拜5下午,有一些小伙伴在讨论关于"我对MVP的理解啊","我对RxJava,RxAndroid的理解啊"等等.在交流中发现,其实我们往往在实际开发中有意无意的都可能出现某个类特别的繁杂,代码特别的多,而且其实很多都是重复的,但是又没有办法,诸如一大堆回调. 可能在项目构建之初,想着我要如何如何去实现,如何如何优化代码结构,逻辑等等,可是因为理解或者业务繁重等各个因素,导致到后来还是挤成一坨龙猫,像这样(麦麦胖的脚都看不见了,臃肿,

MAC下调试JSON接口的工具(HTTP抓包工具)

MAC下的HTTP接口抓包工具,专业级: 专门做JSON接口测试的工具,简单好用!

华为交换机在Telnet登录下自动显示接口信息

因为用console连接交换机,默认是自动显示接口信息的,比如down掉一个接口后,会自动弹出接口被down掉的信息,但是在telnet连接下,默认是不显示这些信息的,需要开启后才可显示. 1.首先开启info-center(默认是开启的): # system-view# info-center enable 2.开启当前终端对系统信息的监视功能(回到用户视图): # terminal monitor 3.开启当前终端对日志信息的显示功能: # terminal logging 这样就可在tel

IIS服务器环境下某路径下所有PHP接口无法运行报500.19错误

IIS服务器环境下某路径(文件夹)下所有PHP接口无法运行报500.19错误 环境:IIS8.5 + php7.2.1 错误描述:某目录下(如 d:\web\A)所有php接口文档运行错误,接口测试工具返回空内容,浏览器提示500错误 解决方式: 开启PHP和IIS错误日志: 查看IIS日志,发现线索 #Fields: date time s-ip cs-method cs-uri-stem cs-uri-query s-port cs-username c-ip cs(User-Agent)