有头文件stack.h和cpp文件stack.cpp
stack.h的内容是:
#ifndef Stack_h
#define Stack_h
class Stack
{
private:
int *data;//存放栈数据
int count;//存放栈顶指针
int size;//栈的容量
public:
Stack(int stacksize=10);//构造函数建立具有10元素的默认栈
~Stack();
void Push(int x);//元素入栈
int Pop();//元素出栈
int howMany();//判定栈中有多个元素
};
#endif
stack.cpp的内容:
#include "stack.h"
#include <iostream>
using namespace std;
Stack::Stack(int stacksize)
{
if(stacksize>0)
{
size=stacksize;
data=new int[stacksize];
for(int i=0;i<size;i++)
data[i]=0;
}
else
{
data=0;
size=0;
}
count=0;
}
Stack::~Stack()
{
delete []data;
}
void Stack::Push(int x)
{
if(count<size)
{
data[count]=x;
count++;
}
else
{
cout<<"堆栈已满,不能再压入数据: "<<x<<endl;
}
}
int Stack::Pop()
{
if(count<=0)
{
cout<<"堆栈已空!"<<endl;
exit(1);//堆栈操作失败,退出程序!
}
count--;
return data[count];
}
int Stack::howMany()
{
return count;
}
为什么头文件写出函数却不在头文件里定义而在一个cpp文件里定义,这两个文件是怎么联系起来的?
cpp里面的data=new int[stacksize];这函数是什么意思??那data是什么来的!?
追答data 在.h文件里有定义 是指针 这句的意思是申请一段常为stacksize的int型数组
追问其实还有一个函数stackmain.cpp,但怎么跟stack.cpp有联系呢??
#include "stack.h"
#include
using namespace std;
void main()
{
Stack s1;
s1.Push(1);
s1.Push(12);
s1.Push(32);
int x1=s1.Pop();
int x2=s1.Pop();
int x3=s1.Pop();
cout<<x1<<"\t"<<x2<<"\t"<<x3<<endl;
}
就是都是cpp文件,先编译器先编译了stackmain。cpp那不是有问题吗?
那可以在头文件定义函数么??
追答可以,你写一些简单的函数试试就知道了