C++中有头文件和实现文件共同来完成一个类或其他的方法,更术语一点是一个是声明,一个是定义,声明是让人能够在不同的程序页面或不同的DLL之间知道你到底有多少东西,这里也可以这样解释你到底想让人知道多少;而定义是你声明的函数(方法)是怎样完成一件事情的,也就是方法的实现。在《C++程序语言设计》中举了个堆栈的例子,例如我们在Stack.h中声明了一个类,而在Stack.cpp中实现了这个类的方法(当然要include头文件),当我们在其他页面中要用到Stack类时就要引用到Stack.h文件,如下图所示:
下面我们来看看Stack.h的定义:
class Stack
{
public:
Stack(int s);
~Stack(void);
private:
const int max_size;
char* v;
int top = 0;
public:
void push(char c);
char pop();
class Overflow{};//异常
class Underflow{};//异常
class BadSize{};//异常
};
下面是实现Stack.h的Stack.cpp的定义:{
public:
Stack(int s);
~Stack(void);
private:
const int max_size;
char* v;
int top = 0;
public:
void push(char c);
char pop();
class Overflow{};//异常
class Underflow{};//异常
class BadSize{};//异常
};
1 #include "Stack.h"
2
3 Stack::Stack(int s)
4 {
5 top = 0;
6 if(s < 0 || s > 10000)
7 throw BadSize();
8
9 max_size = s;
10 v = new char[s];
11 }
12
13 Stack::~Stack(void)
14 {
15 delete[] v;
16 }
17
18 Stack::push(char c)
19 {
20 if(top == max_size)
21 throw Overflow();
22
23 v[top] = c;
24 top++;
25 }
26
27 Stack::pop()
28 {
29 if(top = 0)
30 throw Underflow();
31 top--;
32 return v[top];
33 }
2
3 Stack::Stack(int s)
4 {
5 top = 0;
6 if(s < 0 || s > 10000)
7 throw BadSize();
8
9 max_size = s;
10 v = new char[s];
11 }
12
13 Stack::~Stack(void)
14 {
15 delete[] v;
16 }
17
18 Stack::push(char c)
19 {
20 if(top == max_size)
21 throw Overflow();
22
23 v[top] = c;
24 top++;
25 }
26
27 Stack::pop()
28 {
29 if(top = 0)
30 throw Underflow();
31 top--;
32 return v[top];
33 }
从上面我们就可以看出了怎样定义一个类,这个只是堆栈的一种,可能不同类型的堆栈他们的push和pop的方法实现的不一样,这样我们为了能够提供给多个类型使用面向对象的特性“继承”。把Stack类定义为一个抽象类型,而实现抽象类型中的方法的不同类型也称为多态类型。我们需要借助关键字virtual来声明,例如我们只要把上面的push和pop方法的声明改成如下所示:
virtual void push(char c)=0;
virtual char pop()=0;
virtual char pop()=0;
从上面我们可以看到声明后带着“=0”这个表示在继承的子类中必须重写此方法[如果你熟悉C#的话,我觉得这就是抽象abstract]。当然当我们应用到其他函数中是可以声明一个引用变量如下所示:
void f(Stack& s);
这样将继承的子类实例引用到f的参数中就可以实现了[C#和这个很像,也许C#就是从这边接过来的东西,我是.NET的开发人员对此也比较熟悉就不多说了]。当我们子类继承基类时具有几个访问权限,通常我们使用的都是public关于这个我们在以后还会碰到这里就不多说了,要继承一个基类,必须包含基类的头文件,并在声明类的时候通过":"来实现继承如:ListStack:public Stack,子类的实现方式和其他一样。
看大师的书真的很爽,不知不觉被他引入了。慢慢的由浅入深一个一个概念孕育而生,今天理解了这些东东我想也应该完成任务了,OK关电脑睡觉!再次谢谢师傅的推荐!