首页 > 编程语言 > 详细

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

时间:2017-01-15 00:20:13      阅读:272      评论:0      收藏:0      [点我收藏+]

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

 

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

原文:http://www.cnblogs.com/lanjianhappy/p/6286424.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!