也就是训练将原来的c语言 用类表示出来。。
关于构造器:
//1与类名相同 没有返回值 被系统生成对象时自动调用,用于初始化
//2 可以有参数 构造器重载 默认参数
//3 重载和默认不能同时存在,系统默认生成一个无参的构造器,如果提供了,那么系统不在提供
1 #include <iostream> 2 3 using namespace std; 4 5 typedef struct Stack 6 { 7 char space[1024]; 8 int top; 9 }Stack; 10 void init(Stack *s) 11 { 12 s->top = 0; 13 memset(s->space,0,1024); 14 } 15 int isEmpty(Stack *s) 16 { 17 return s->top == 0; 18 } 19 int isFull(Stack *s) 20 { 21 return s->top == 1024; 22 } 23 24 char pop(Stack *s) 25 { 26 return s->space[--(s->top)]; 27 } 28 char push(Stack *s,char c) 29 { 30 return s->space[s->top++] = c; 31 } 32 int main() 33 { 34 35 Stack st; 36 init(&st); 37 if(!isFull(&st)) 38 { 39 push(&st,'g'); 40 } 41 if(!isFull(&st)) 42 { 43 push(&st,'t'); 44 } 45 if(!isFull(&st)) 46 { 47 push(&st,'n'); 48 } 49 if(!isFull(&st)) 50 { 51 push(&st,'h'); 52 } 53 if(!isFull(&st)) 54 { 55 push(&st,'r'); 56 } 57 while(!isEmpty(&st)) 58 { 59 cout<<pop(&st)<<endl; 60 } 61 return 1; 62 }
c++的实现
1 //stack.cpp 2 3 4 #include <iostream> 5 #include "stack.h" 6 using namespace std; 7 8 bool Stack:: isEmpty() 9 { 10 return top == 0; 11 } 12 bool Stack:: isFull() 13 { 14 return top == _size; 15 } 16 17 char Stack:: pop() 18 { 19 return space[--(top)]; 20 } 21 char Stack:: push(char c) 22 { 23 return space[top++] = c; 24 }
//stack.h #include <iostream> using namespace std; //2017/1/14 //construtot 构造器 //1与类名相同 没有返回值 被系统生成对象时自动调用,用于初始化 //2 可以有参数 构造器重载 默认参数 //3 重载和默认不能同时存在 //destructor 析构器 //~与类型相同 无参无返回 用于对象销毁时的内存处理工作 // class Stack { public: Stack()//这里通过其中一个注释和同时注释可以得到一个结论: //系统默认生成一个无参的构造器,如果提供了,那么系统不在提供 { //init(); //cout<<"stack()"<<endl; top = 0; space = new char[1000]; } Stack(int size)//重载 { top = 0; 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; };
1 //main.cpp 2 3 4 5 #include <iostream> 6 #include "stack.h" 7 using namespace std; 8 int main() 9 { 10 Stack *ps = new Stack;//无参构造 标配 11 Stack *ps2 = new Stack(100); 12 delete ps; 13 delete ps2;//此时需要手动 14 //Stack st;//此时调用无参构造 15 //为什么不是stack st() 只是因为有一个 16 //冲突和函数void function(); 17 Stack st(100);//调用有参构造 18 //st.init(); 19 for(char y='a';!st.isFull()&&y!='z';y++) 20 { 21 st.push(y); 22 } 23 while(!st.isEmpty()) 24 { 25 cout<<st.pop()<<endl; 26 } 27 return 1; 28 }