C++下实现同接口下多个类作为参数的调用和传参
/*
实现同接口下不同类的对象的转移
定义类的接口
定义多个继承该接口的类
定义管理类,把接口当作类型,
传入该接口下各种类的对象,进行操作
*/
#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++下实现同接口下多个类作为参数的调用和传参的更多相关文章
- C#进阶系列——WebApi 接口参数不再困惑:传参详解
前言:还记得刚使用WebApi那会儿,被它的传参机制折腾了好久,查阅了半天资料.如今,使用WebApi也有段时间了,今天就记录下API接口传参的一些方式方法,算是一个笔记,也希望能帮初学者少走弯路.本 ...
- WebApi 接口参数不再困惑:传参详解
阅读目录 一.get请求 1.基础类型参数 2.实体作为参数 3.数组作为参数 4.“怪异”的get请求 二.post请求 1.基础类型参数 2.实体作为参数 3.数组作为参数 4.后台发送请求参数的 ...
- 【转】C#进阶系列——WebApi 接口参数不再困惑:传参详解
原文地址:http://www.cnblogs.com/landeanfen/archive/2016/04/06/5337072.html 阅读目录 一.get请求 1.基础类型参数 2.实体作为参 ...
- C#WebApi 接口参数不再困惑:传参详解
前言:还记得刚使用WebApi那会儿,被它的传参机制折腾了好久,查阅了半天资料.如今,使用WebApi也有段时间了,今天就记录下API接口传参的一些方式方法,算是一个笔记,也希望能帮初学者少走弯路.本 ...
- [转]C#进阶系列——WebApi 接口参数不再困惑:传参详解
本文转自:http://www.cnblogs.com/landeanfen/p/5337072.html#_label1_2 阅读目录 一.get请求 1.基础类型参数 2.实体作为参数 3.数组作 ...
- sC#进阶系列——WebApi 接口参数不再困惑:传参详解
原文:http://www.cnblogs.com/landeanfen/p/5337072.html 一.get请求 对于取数据,我们使用最多的应该就是get请求了吧.下面通过几个示例看看我们的ge ...
- (转)C# WebApi 接口参数不再困惑:传参详解
原文地址:https://www.cnblogs.com/landeanfen/p/5337072.html 本篇打算通过get.post.put.delete四种请求方式分别谈谈基础类型(包括int ...
- 踩坑记录--接口调用,传参DataTable报错
问题描述 服务端提供接口,接口参数包含DataTable类型,客户端调用显示请求报错,Postman调用显示Could not get response 解决 原因 接口实现基于wcf,而wcf参数类 ...
- 2016/1/21 练习 创建 接口interface 应用implements 类class 并实例化调用
package testinterface; public interface ICpu { //电压 public boolean dianya(); //控制 public void kongzh ...
随机推荐
- Redux 入门教程(一):基本用法
转自http://www.ruanyifeng.com/blog/2016/09/redux_tutorial_part_one_basic_usages.html(仅供个人学习使用) 首先明确一点, ...
- 点击小图查看大图jQuery插件FancyBox魔幻灯箱
今日发现一个不错的JQuery插件FancyBox,也许早就有这个插件了,但是没名字,我就暂且叫他魔幻灯箱吧,采用Mac系统的样式.网传主要有以下功能:■弹出的窗口有很漂亮的阴影效果.■关联的对象(就 ...
- tensorflow enqueue_many传入多个值的列表传入异常问题————Shape () must have rank at least 1
tf 的队列操作enqueue_many传入的值是列表,但是放入[]列表抛异常 File "C:\Users\lihongjie\AppData\Local\Programs\Python\ ...
- Django之自带认证
自带登录实例 {% extends "layout/base.html" %} // 所有link {% block body %} <div id="contai ...
- mac 上面安装 tree 命令
相信很多使用过Linux的用户都用过tree命令,它可以像windows的文件管理器一样清楚明了的显示目录结构. 但是mac下默认是没有 tree命令的. 1.我们可以使用find命令模拟出tree命 ...
- Redux和React-Redux的实现(三):中间件的原理和applyMiddleware、Thunk的实现
现在我们的Redux和React-Redux已经基本实现了,在Redux中,触发一个action,reducer立即就能算出相应的state,如果我要过一会才让reducer计算state呢怎么办?也 ...
- Daily Scrum 11.10
今日完成任务: 1.加入更改头像功能 2.解决不发送激活邮件和重置密码邮件的问题 3.在服务器上部署网站 4.加入匿名提问功能 明日任务: 黎柱金 修改数据库用户表,实现用户积分管理功能 晏旭瑞 解决 ...
- 奔跑吧DKY——团队Scrum冲刺阶段-Day 5
今日完成任务 谭鑫:继续解决背景音乐的问题,修改游戏中的bug. 黄宇塘:背景图片需重做,开始制作人物图片和背景图. 赵晓海:制作人物图及背景图. 方艺雯:制作人物图,编写博客. 王禹涵:继续解决背景 ...
- 从高版本JDK换成低版本JDK报错Unsupported major.minor version 52.0的解决方案
从高版本JDK换成低版本JDK报错Unsupported major.minor version 52.0 java.lang.UnsupportedClassVersionError: PR/Sor ...
- "1001. A+B Format (20)" 解题报告
Github : git@github.com:Circlecos/object-oriented.git PDF Of Markdown : "1001. A+B Format (20)& ...