欢迎来到贱贱的博客

扩大
缩小

c语言和c++栈的简单实现以及构造器的原理

也就是训练将原来的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 }

 

posted on 2017-01-14 23:53  L的存在  阅读(350)  评论(0编辑  收藏  举报

导航