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 ...
随机推荐
- “Hello World!团队”Final发布—视频链接+文案+美工
视频发布:http://www.bilibili.com/video/av17022373/ 文案加美工:http://www.cnblogs.com/chjy/p/7990116.html SkyH ...
- iOS开发学习-给圆形图片添加边框
imageView.layer.cornerRadius = imageView.bounds.size.width * 0.5;// 设置圆角刚好是自身宽度的一半,就刚好是圆形 imageView. ...
- Leetcode题库——27.移除元素
@author: ZZQ @software: PyCharm @file: removeElement.py @time: 2018/9/23 14:04 要求:给定一个数组 nums 和一个值 v ...
- DPDK QoS_meter 源码阅读
main.c /* SPDX-License-Identifier: BSD-3-Clause * Copyright(c) 2010-2016 Intel Corporation */ #inclu ...
- 使用JProfiler做性能分析过程
供自己记录一下,也分享给大家使用JProfiler的过程(感谢教我使用这个工具的大佬),整个博客比较粗糙,希望对大家有帮助 1.首先安装好JProfiler,打开eclipse,右键你所要分析的项目, ...
- 利用CNN进行多分类的文档分类
# coding: utf-8 import tensorflow as tf class TCNNConfig(object): """CNN配置参数"&qu ...
- EF 小数位的保留
问题描述:当采用EF的DbContext保存decimal类型数据到数据库,默认只会保存小数点后的前2位小数,其余均置0:例如保存101.182352152322,实际存到数据库里的数据为101.18 ...
- C51中的关键字data,idata,xdata,pdata,bdata
写在最前面的话:官方网站的解答是最可信的.英语不错的必看.http://www.keil.com/support/man/docs/c51/c51_le_memtypes.htm 下面转载几篇中文的, ...
- 开放地址法散列表ADT
数据结构定义如下: typedef unsigned int Index; typedef Index Position; struct HashTbl; typedef struct HashTbl ...
- phantomjsDriver的初始化
public static void main(String[] args) { File file=new File("src/main/resources/drivers"); ...