对stackt中的每一个对象调用某个方法,stackt采用模板进行定义

翻译 2013年12月04日 18:55:00

1. stackT.h

#ifndef STACKT_H_
#define STACKT_H_

template<class T> class stackIter;

template<class T>
class stackt
{
	enum{ssize = 100};
	T stack[ssize];
	int top;
public:
	stackt() : top(0)
	{
		stack[top] = 0;
	}
	void push(const T& i)
	{
		if(top < ssize)
		{
			stack[top++] = i;
		}
	}

	T pop()
	{
		return stack[top > 0 ? --top : top];
	}

	friend class stackIter<T>;
};

template<class T>
class stackIter
{
	stackt<T>& S;
	int index;
public:
	stackIter(stackt<T>& is) : S(is), index(0){}
	T& operator++()
	{
		if (index < S.top - 1)
		{
			index++;
		}
		return S.stack[index];
	}
	T& operator++(int)
	{
		int returnIndex = index;
		if (index < S.top - 1)
		{
			index++;
		}
		return S.stack[returnIndex];
	}
};

#endif

2. main.cpp


#include "stackT.h"
#include <iostream>
using namespace std;

template<class T, class R>
void applist(stackt<T>& t1, R (T::*f)(), int size)
{
	stackIter<T> it(t1);
	for (int i = 0; i < size; i++)
	{
		T& t = it++;
		(t.*f)();
	}
}

template<class T, class R, class A1, class A2>
void applist(stackt<T>& t1, R (T::*f)(A1, A2), A1 a1, A2 a2, int sz)
{
	stackIter<T> it(t1);
	for (int i = 0; i < sz; i++)
	{
		T& t = it++;
		(t.*f)(a1, a2);
	}
}

class gromit
{
	int arf;
public:
	gromit(int Arf = 1) : arf(Arf + 1){}
	void speek()
	{
		cout << "speek() : " << arf << endl;
	}
	int sleep(char, double)
	{
		cout << "zzz..." << endl;
		return 0;
	}
};

int main()
{
	stackt<gromit> dogs;
	const int sz = 5;

	for (int i = 0; i < sz; i++)
	{
		dogs.push(*new gromit(i));
	}

	applist(dogs, &gromit::speek, sz);
	applist(dogs, &gromit::sleep, 'z', 3.0, sz);

	system("pause");
	return 1;
}


对于所有对象都通用的方法

8.覆盖equals时请遵守通用规定 需要满足的条件:  类的每个实例本质上都是唯一的。  不关心类是否提供了“逻辑相等(logical equality)”的测试功能。  超类已经覆盖了equal...
  • yuhan_9204
  • yuhan_9204
  • 2016年06月27日 11:41
  • 304

GC判断可回收对象算法

声明:本文摘录周志明先生的《深入理解Java虚拟机》,记录下GC算法中的可达性算法分析。是在问答频道看到一个对可达性算法的疑问,梳理下,也是自我学习巩固的过程。关于可达性算法的几点记录如下: 首...
  • wojiushiwo945you
  • wojiushiwo945you
  • 2016年11月10日 17:28
  • 489

vm模版调用对象方法

@RequestMapping(value = "/index.do")//, public ModelAndView index(Integer pageNum,Integer numPer...
  • happinessaflower
  • happinessaflower
  • 2014年06月20日 12:31
  • 493

JAVA动态调用当前对象里面的方法

@RequestMapping("/test") @ResponseBody public String test(HttpServletRequest request,HttpServletRe...
  • chenyongtu110
  • chenyongtu110
  • 2016年10月26日 22:07
  • 622

ADO.NET对象组成与数据库连接方法

好多C#初学者这在学习C#与数据库访问时,经常出现各种错误,今天在这里给大家详细的讲解一下。,首先您要明白为什么要学习ADO.NET,前面我们学习C#面向对象编程基础和数据库,在讲数据库的时候,我们就...
  • lrgdongnan
  • lrgdongnan
  • 2016年01月04日 13:38
  • 2164

深度学习OverFeat

对于分类问题而言,一个常用的增加训练样本的方法是将训练样本随机移动一个小的位移,或者,等价的, 在图像中随机取一些大的图像块。然后以这些图像块为输入训练分类模型。在测试阶段,可以采用滑窗的方法对 ...
  • BBZZ2
  • BBZZ2
  • 2016年09月21日 16:25
  • 875

thinkphp3.2 自定义常量及其在后台与模板的调用

自定义常量的时候,可以在Common/Conf文件夹下新建const.php //const.php return array( 'MODE_INSERT' => 1, 'MODE_UPDATE' ...
  • clarkt
  • clarkt
  • 2014年12月29日 17:57
  • 4458

软件工程--需求分析方法

结构化分析法(SA法)     结构化分析法际遇问题分解与抽象的观点,讲任何信息处理过程看作是将输入数据变换成所要求的输出信息的装置,因此数据流分析是需求分析的出发点.SA方法采用"自顶向下,由外及...
  • zhuanzhe117
  • zhuanzhe117
  • 2012年11月30日 10:46
  • 2298

Java垃圾回收机制(扫盲篇)

Java语言的一个显著特点就是引入了垃圾回收机制,使c++程序员最头疼的内存管理的问题迎刃而解,它使得Java程序员在编写程序的时候不再需要考虑内存管理。由于有个垃圾回收机制,Java中的对象不再有”...
  • leisure_life
  • leisure_life
  • 2017年07月06日 10:54
  • 95

Java中如何把一组对象按照其某一个属性值进行排序?

我有一个List ops,其中每一个Operation对象都含有一个int的属性叫startTime, 请问如何按照startTime的值对ops里面的对象进行从小到大的重新排序? 首先,你写个...
  • kouwoo
  • kouwoo
  • 2016年01月07日 16:03
  • 3136
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:对stackt中的每一个对象调用某个方法,stackt采用模板进行定义
举报原因:
原因补充:

(最多只允许输入30个字)