也就是训练将原来的c语言 用类表示出来。。

关于构造器:

  //1与类名相同 没有返回值 被系统生成对象时自动调用,用于初始化
  //2 可以有参数 构造器重载 默认参数
  //3 重载和默认不能同时存在,系统默认生成一个无参的构造器,如果提供了,那么系统不在提供

 #include <iostream>

 using namespace std;

 typedef struct Stack
{
char space[];
int top;
}Stack;
void init(Stack *s)
{
s->top = ;
memset(s->space,,);
}
int isEmpty(Stack *s)
{
return s->top == ;
}
int isFull(Stack *s)
{
return s->top == ;
} char pop(Stack *s)
{
return s->space[--(s->top)];
}
char push(Stack *s,char c)
{
return s->space[s->top++] = c;
}
int main()
{ Stack st;
init(&st);
if(!isFull(&st))
{
push(&st,'g');
}
if(!isFull(&st))
{
push(&st,'t');
}
if(!isFull(&st))
{
push(&st,'n');
}
if(!isFull(&st))
{
push(&st,'h');
}
if(!isFull(&st))
{
push(&st,'r');
}
while(!isEmpty(&st))
{
cout<<pop(&st)<<endl;
}
return ;
}

c++的实现

 //stack.cpp

 #include <iostream>
#include "stack.h"
using namespace std; bool Stack:: isEmpty()
{
return top == ;
}
bool Stack:: isFull()
{
return top == _size;
} char Stack:: pop()
{
return space[--(top)];
}
char Stack:: push(char c)
{
return space[top++] = c;
}
//stack.h

#include <iostream>

using namespace std;
//2017/1/14
//construtot 构造器
//1与类名相同 没有返回值 被系统生成对象时自动调用,用于初始化
//2 可以有参数 构造器重载 默认参数
//3 重载和默认不能同时存在 //destructor 析构器
//~与类型相同 无参无返回 用于对象销毁时的内存处理工作
//
class Stack
{
public:
Stack()//这里通过其中一个注释和同时注释可以得到一个结论:
//系统默认生成一个无参的构造器,如果提供了,那么系统不在提供 { //init();
//cout<<"stack()"<<endl;
top = ;
space = new char[]; }
Stack(int size)//重载
{
top = ;
space = new char[size];
_size = size;
}
~Stack()
{
cout<<"析构"<<endl;
}
//void init();
bool isEmpty();
bool isFull();
char pop();
char push(char c);
private: char *space;
int top;
int _size;
};
 //main.cpp

 #include <iostream>
#include "stack.h"
using namespace std;
int main()
{
Stack *ps = new Stack;//无参构造 标配
Stack *ps2 = new Stack();
delete ps;
delete ps2;//此时需要手动
//Stack st;//此时调用无参构造
//为什么不是stack st() 只是因为有一个
//冲突和函数void function();
Stack st();//调用有参构造
//st.init();
for(char y='a';!st.isFull()&&y!='z';y++)
{
st.push(y);
}
while(!st.isEmpty())
{
cout<<st.pop()<<endl;
}
return ;
}
05-28 13:57