构造函数和析构函数

oop实现顺序栈

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
class SeqStack{
public :
void init(int size=10) //形参默认值
{
_pstack = new int[size];
_top = -1;
_size = size;
}
void release()
{
delete [] _pstack; //delete[]
_pstack = nullptr;
}
void push(int val)
{
if(full())
resize();
_pstack[++_top] = val;
}
void pop()
{
if(empty())
return;
--_top;

}
int top()
{
return _pstack[_top];
}
bool empty()
{
return _top == -1;
}
bool full()
{
return _top == _size - 1;
}



private : //先看属性,写成私有
int *_pstack; //指针,写成指针内存可增长
int _top; //栈顶
int _size;
void resize() //扩容
{
int *ptmp = new int[_size * 2];
for(int i = 0; i <= _top; ++i)
{
ptmp[i] = _pstack[i];
} //memcpy(ptmp,_pstack,_size*sizeof(int))
//realloc 此处int内存拷贝可以,但对象时不合适
delete [] _pstack;
_pstack = ptmp;
size *= 2;
}


};

int main(){
SeqStack s;
s.init();
for(int i = 0; i < 15; ++i)
{
s.push(rand()%100);
}
while(!s.empty())
{
cout << s.top() << " ";
s.pop();
}
s.release();
}

构造函数和析构函数

函数的名字和类名一样,无返回值

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
class SeqStack{
public :
//构造函数可带参数,可以有多个重载
SeqStack(int size=10) //不用init了
{
cout<<this<<"SeqStack()"<<endl;
_pstack = new int[size];
_top = -1;
_size = size;
}
~SeqStack() //析构函数,只能有一个,不带参数
{
cout<<this<<"~SeqStack()"<<endl;
delete [] _pstack;
_pstack = nullptr;
}
void push(int val)
{
if(full())
resize();
_pstack[++_top] = val;
}
void pop()
{
if(empty())
return;
--_top;

}
int top()
{
return _pstack[_top];
}
bool empty()
{
return _top == -1;
}
bool full()
{
return _top == _size - 1;
}



private : //先看属性,写成私有
int *_pstack; //指针,写成指针内存可增长
int _top; //栈顶
int _size;
void resize() //扩容
{
int *ptmp = new int[_size * 2];
for(int i = 0; i <= _top; ++i)
{
ptmp[i] = _pstack[i];
} //memcpy(ptmp,_pstack,_size*sizeof(int))
//realloc 此处int内存拷贝可以,但对象时不合适
delete [] _pstack;
_pstack = ptmp;
size *= 2;
}


};
SeqStack gs; //全局变量,最后析构
int main(){

SeqStack *ps = new SeqStack(60);
//这种不会自己析构
//new=分配内存+构造函数

delete ps; //delete=析构+free





//定义一个对象,1.开辟内存 2.调用构造函数
SeqStack s;
//s.init();
for(int i = 0; i < 15; ++i)
{
s.push(rand()%100);
}
while(!s.empty())
{
cout << s.top() << " ";
s.pop();
}

SeqStack s1(50); //先构造后析构
return 0; //析构函数会自动调用

}