C/C++函數(shù)調(diào)用棧的實(shí)現(xiàn)方法
本文實(shí)例講述了C/C++函數(shù)調(diào)用棧的實(shí)現(xiàn)方法??捎糜趯?shí)現(xiàn)簡單的腳本解釋器。分享給大家供大家參考。具體實(shí)現(xiàn)方法如下:
頭文件聲明部分:
const int BUFFERSIZE = 1024;
const int growfactor = 2;
// this stack is used as call stack.
class TStack{
private:
size_t size; // the stack length
size_t pos; // the stack top position
char *buffer; // the buffer
private:
void push(void* D, size_t bytecount); // the implementation of push
void* pop(size_t bytecount); // the implementation of pop
public:
TStack(size_t _size = BUFFERSIZE, size_t _pos = 0); // initialize
TStack(const TStack& o); // copy
TStack& operator=(const TStack& o); // assignment
void pushInt(int i) { push(&i, sizeof(int)); } // push an int
void pushLong(long l) { push(&l, sizeof(long)); } // push a long
void pushfloat(double f) { push(&f, sizeof(f));} // push a double
void pushPointer(void* p){ push(p, sizeof(p)); }
// int
int popInt() { return *(int *)pop(sizeof(int));} // pop an int
long popLong() { return *(long *)pop(sizeof(long)); } // pop an int
double* popfloat() { return (double*)pop(sizeof(double)); } // pop a double
void* popPointer() { return pop(sizeof(void*)) ; }
void clear() { pos = 0; }
};
實(shí)現(xiàn)部分:
#include "TStack.h"
#include "new.h"
void TStack::push( void* D, size_t bytecount )
{
// if memory is not enough
// if run under multithread envionment,
// a lock or critical section should be added
if (pos + bytecount > size)
{
size_t oldsize = size;
size *= growfactor;
char *newbuffer = new char[size];
memcpy(newbuffer, buffer, oldsize);
delete buffer;
buffer = newbuffer;
}
memcpy(buffer+pos, D, bytecount);
pos += bytecount;
}
void* TStack::pop( size_t bytecount )
{
// need synchronization for multithread environment
pos -= bytecount;
return &buffer[pos];
}
TStack::TStack( size_t _size , size_t _pos )
:size(_size),
pos(_pos),
buffer(new char[size])
{
}
TStack::TStack( const TStack &O )
:size(O.size),
pos(O.pos)
{
buffer = new char[size];
if (buffer != NULL)
{
memcpy(buffer, O.buffer, size);
}
}
TStack& TStack::operator=( const TStack& O )
{
if (this == &O)
return *this;
this->size = O.size;
this->pos = O.pos;
if (buffer != NULL)
{
delete buffer;
}
buffer = new char[this->size];
if (buffer != NULL)
{
memcpy(buffer, O.buffer, this->size);
}
return *this;
}
希望本文所述對大家的C++程序設(shè)計(jì)有所幫助。
上一篇:C++基礎(chǔ)入門教程(六):為什么創(chuàng)建類的時(shí)候要用new?
欄 目:C語言
下一篇:C++利用stringstream進(jìn)行數(shù)據(jù)類型轉(zhuǎn)換實(shí)例
本文標(biāo)題:C/C++函數(shù)調(diào)用棧的實(shí)現(xiàn)方法
本文地址:http://www.jygsgssxh.com/a1/Cyuyan/3178.html
您可能感興趣的文章
- 04-02c語言函數(shù)調(diào)用后清空內(nèi)存 c語言調(diào)用函數(shù)刪除字符
- 04-02c語言的正則匹配函數(shù) c語言正則表達(dá)式函數(shù)庫
- 04-02func函數(shù)+在C語言 func函數(shù)在c語言中
- 04-02c語言中對數(shù)函數(shù)的表達(dá)式 c語言中對數(shù)怎么表達(dá)
- 04-02c語言用函數(shù)寫分段 用c語言表示分段函數(shù)
- 04-02c語言編寫函數(shù)冒泡排序 c語言冒泡排序法函數(shù)
- 04-02c語言沒有round函數(shù) round c語言
- 04-02c語言分段函數(shù)怎么求 用c語言求分段函數(shù)
- 04-02C語言中怎么打出三角函數(shù) c語言中怎么打出三角函數(shù)的值
- 04-02c語言調(diào)用函數(shù)求fibo C語言調(diào)用函數(shù)求階乘


閱讀排行
本欄相關(guān)
- 04-02c語言函數(shù)調(diào)用后清空內(nèi)存 c語言調(diào)用
- 04-02func函數(shù)+在C語言 func函數(shù)在c語言中
- 04-02c語言的正則匹配函數(shù) c語言正則表達(dá)
- 04-02c語言用函數(shù)寫分段 用c語言表示分段
- 04-02c語言中對數(shù)函數(shù)的表達(dá)式 c語言中對
- 04-02c語言編寫函數(shù)冒泡排序 c語言冒泡排
- 04-02c語言沒有round函數(shù) round c語言
- 04-02c語言分段函數(shù)怎么求 用c語言求分段
- 04-02C語言中怎么打出三角函數(shù) c語言中怎
- 04-02c語言調(diào)用函數(shù)求fibo C語言調(diào)用函數(shù)求


