/*
实现同接口下不同类的对象的转移
定义类的接口
定义多个继承该接口的类
定义管理类,把接口当作类型,
传入该接口下各种类的对象,进行操作
*/
#include<iostream>
#include<map>
#include<cstdlib>
using namespace std;
template<typename keyType,typename valueType>
struct Node{
keyType key;
valueType value;
Node *next;
};
template<typename keyType,typename valueType>
class List
{
public:
List()
{
tail=accom=mallocmemory();//initialize head node
}
void Add(keyType key,valueType value){
Node<keyType,valueType> *nd=mallocmemory();
nd->key=key;
nd->value=value;
tail->next=nd;
tail=tail->next;
}
valueType Get(keyType key,bool del=false)
{
Node<keyType,valueType> *record,*temp=accom->next;
valueType t;
while(temp!=NULL&&temp->key!=key)
{
temp=temp->next;
}
t=temp->value;
if(del)
{
record=accom;
while(record->next!=temp)
record=record->next;
record=temp->next;
free(temp);
}
return t;
}
bool Exist(keyType key)
{
Node<keyType,valueType> *temp=accom->next;
while(temp!=NULL&&temp->key!=key)
{
temp=temp->next;
}
if(temp==NULL)
return false;
return true;
}
valueType RemoveById(keyType id)
{
return Get(id,true);
}
private:
Node<keyType ,valueType> *mallocmemory(){
Node<keyType,valueType> *nd=(Node<keyType,valueType>*)malloc(sizeof(Node<keyType,valueType>));
nd->next=NULL;
return nd;
}
Node<keyType,valueType> *accom,*tail;
};
class IPerson{
public:
virtual void SetName(string name)=;
virtual void SetAge(int age)=;
virtual void ShowInfo()=;
};
class Student:public IPerson
{
public:
void SetName(string name)
{
Name=name;
}
void SetAge(int age)
{
Age=age;
}
void ShowInfo()
{
cout<<"学生信息:"<<endl;
cout<<"\tName: "<<Name<<endl;
cout<<"\tAge : "<<Age<<endl;
}
private:
string Name;
int Age;
};
class Parent:public IPerson
{
public:
void SetName(string name)
{
Name=name;
}
void SetAge(int age)
{
Age=age;
}
void ShowInfo()
{
cout<<"家长信息:"<<endl;
cout<<"\tName: "<<Name<<endl;
cout<<"\tAge : "<<Age<<endl;
}
private:
string Name;
int Age;
};
class Teacher:public IPerson
{
public:
void SetName(string name)
{
Name=name;
}
void SetAge(int age)
{
Age=age;
}
void ShowInfo()
{
cout<<"老师信息:"<<endl;
cout<<"\tName: "<<Name<<endl;
cout<<"\tAge : "<<Age<<endl;
}
private:
string Name;
int Age;
};
class Manager{
public:
Manager()
{
curPer=NULL;
}
void SetName(string name)
{
curPer->SetName(name);
}
void SetAge(int age)
{
if(curPer==NULL)cout<<"农夫"<<endl;
else
curPer->SetAge(age);
}
void ShowInfo()
{
curPer->ShowInfo();
}
void AddPeople(int id,IPerson *person)
{
per.Add(id,person);
}
void ChangeState(int id)
{
if(per.Exist(id))
curPer=per.Get(id);
else
cout<<"没有找到这个栈"<<endl;
}
private:
List<int,IPerson*> per;
IPerson *curPer;
};
int main()
{
Parent one;
Student stu;
Teacher tea;
Manager manage;
manage.AddPeople(,&one);
manage.AddPeople(,&stu);
manage.AddPeople(,&tea); manage.ChangeState();
manage.SetAge();
manage.SetName("jiazhang"); manage.ChangeState();
manage.SetAge();
manage.SetName("xuesheng"); manage.ChangeState();
manage.SetAge();
manage.SetName("laoshi");
for(int i=;i>;i--) {
manage.ChangeState(i);
manage.ShowInfo();} return ;
}

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

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

    前言:还记得刚使用WebApi那会儿,被它的传参机制折腾了好久,查阅了半天资料.如今,使用WebApi也有段时间了,今天就记录下API接口传参的一些方式方法,算是一个笔记,也希望能帮初学者少走弯路.本 ...

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

    阅读目录 一.get请求 1.基础类型参数 2.实体作为参数 3.数组作为参数 4.“怪异”的get请求 二.post请求 1.基础类型参数 2.实体作为参数 3.数组作为参数 4.后台发送请求参数的 ...

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

    原文地址:http://www.cnblogs.com/landeanfen/archive/2016/04/06/5337072.html 阅读目录 一.get请求 1.基础类型参数 2.实体作为参 ...

  4. C#WebApi 接口参数不再困惑:传参详解

    前言:还记得刚使用WebApi那会儿,被它的传参机制折腾了好久,查阅了半天资料.如今,使用WebApi也有段时间了,今天就记录下API接口传参的一些方式方法,算是一个笔记,也希望能帮初学者少走弯路.本 ...

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

    本文转自:http://www.cnblogs.com/landeanfen/p/5337072.html#_label1_2 阅读目录 一.get请求 1.基础类型参数 2.实体作为参数 3.数组作 ...

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

    原文:http://www.cnblogs.com/landeanfen/p/5337072.html 一.get请求 对于取数据,我们使用最多的应该就是get请求了吧.下面通过几个示例看看我们的ge ...

  7. (转)C# WebApi 接口参数不再困惑:传参详解

    原文地址:https://www.cnblogs.com/landeanfen/p/5337072.html 本篇打算通过get.post.put.delete四种请求方式分别谈谈基础类型(包括int ...

  8. 踩坑记录--接口调用,传参DataTable报错

    问题描述 服务端提供接口,接口参数包含DataTable类型,客户端调用显示请求报错,Postman调用显示Could not get response 解决 原因 接口实现基于wcf,而wcf参数类 ...

  9. 2016/1/21 练习 创建 接口interface 应用implements 类class 并实例化调用

    package testinterface; public interface ICpu { //电压 public boolean dianya(); //控制 public void kongzh ...

随机推荐

  1. 渡过OO的死劫,了解规格的意义——OO第三次博客总结

    当熬过了一次次黑暗,迎接我们的却是被扣的惨不忍睹的JSF ┭┮﹏┭┮ 一.总结调研 规格的历史 传统科学的特点是发现世界,而软件的特点是构造世界.软件的最底层就是0,1,两个离散的值.程序设计语言的三 ...

  2. Python学习二

    list  [ ] Python内置的一种数据类型是列表:list.list是一种有序的集合,可以随时添加和删除其中的元素 classmates = ['Michael', 'Bob', 'Tracy ...

  3. HDU 1003 最大连续子段和

    题目链接: http://acm.hdu.edu.cn/showproblem.php?pid=1003 Max Sum Time Limit: 2000/1000 MS (Java/Others)M ...

  4. eg_6

    问题描述: 将一句话的单词进行倒置,标点不倒置.比如 I like beijing. 经过函数后变为:beijing. like I Demo1: import java.util.Scanner; ...

  5. PyCharm 配置远程python解释器和在本地修改服务器代码

    PyCharm 配置远程python解释器和在本地修改服务器代码 最近在学习机器学习的过程中,常常需要将本地写的代码传到GPU服务器中,然后在服务器上运行.之前的做法一直是先在本地写好代码,然后通过F ...

  6. Alpha阶段敏捷冲刺③

    1.提供当天站立式会议照片一张. 每个人的工作 (有work item 的ID),并将其记录在码云项目管理中: 昨天已完成的工作. 界面雏形设计 数据库初步设计 完成后端框架初步构建 今天计划完成的工 ...

  7. ORA-06530: 引用未初始化的组合 ;

    select * FROM TABLE(fun_test_1) : ORA-06530: 引用未初始化的组合ORA-06512: 在 "PCISS.FUN_TEST_1", lin ...

  8. 关于vue项目管理项目的架构管理平台

    关于vue项目管理项目的架构管理平台 https://panjiachen.github.io/vue-element-admin-site/#/zh-cn/faq 31.4k 次浏览 完整项目地址: ...

  9. 项目上线,php的错误信息必须不让其在页面中显示给客户,

    对于PHP开发者来 说,一旦某个产品投入使用,应该立即将 display_errors选项关闭,以免因为这些错误所透露的路径.数据库连接.数据表等信息而遭到黑客攻击.但是,任何一个产品在投入使用后,都 ...

  10. git工具的使用总结

    Git的使用 进入一个新的公司或者参入一个新的项目后,可能的第一步就是获取代码仓库的代码.公司内部一般放到代码仓库(下面主要以gitHub.Windows平台为例)的代码都经过加密认证的. 如何将Gi ...