高血压专题网,内容丰富有趣,生活中的好帮手!
高血压专题网 > [C++程序语言设计笔记一]面向对象编程抽象 继承 重写基本介绍

[C++程序语言设计笔记一]面向对象编程抽象 继承 重写基本介绍

时间:2024-06-23 13:25:45

相关推荐

[C++程序语言设计笔记一]面向对象编程抽象 继承 重写基本介绍

今天是个不错的日子,不仅有人收了我做徒弟从此传授我有关C++的一些知识,由于前一段时间喜欢上了外挂的研究也用到了一些MFC的知识及一些Windows APIs编程,但是对C++还是没有从根本上认识。我从来没有过一个真正意义上的计算机老师(那些只会拿着课件给我念的不算),由于一路走来都只有我一个人,身边的人也全是学习科研的,美其名曰:生物工程,我想考过大学的人都知道这个科目的热度有多大---全国十大骗人专业之首。我放弃了我的专业的所有,一头投向计算机中,这可能也是由于我在高中就开始玩“黑客技术”以及我对计算机的敬仰之情所致。说了这么多,都是要感谢这位师傅,而且还是个女生,虽然我们是在网路上认识.....前一段时间看了《Windows核心编程》没有深入了解,谁都知道一本比较好的书没看个几遍是很难懂得他的精髓的,和我学习.NET一样(我看了红皮人头书WROX出版的《.NET入门经典》总共四遍,第一遍不知道说什么;第二编好像是这样;第三遍基本上懂一点;第四遍他才真正把我从VB中给带到C#过来而一发不可自拔,其实中间版本也有更替了现在应该是第4版了吧<怀疑中>)。今天师傅就推荐了一本《C++程序语言设计》今晚下班回来我就慢慢的读起,C++之父的著作应该不错,从今后的一些文章中我会记录一些我对C++的理解,我要把他从0开始的学期。开了他的写作方法不愧为一代大师,看的很爽很容易把我带入状态。

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的定义:

1#include"Stack.h"

2

3Stack::Stack(ints)

4{

5top=0;

6if(s<0||s>10000)

7throwBadSize();

8

9max_size=s;

10v=newchar[s];

11}

12

13Stack::~Stack(void)

14{

15delete[]v;

16}

17

18Stack::push(charc)

19{

20if(top==max_size)

21throwOverflow();

22

23v[top]=c;

24top++;

25}

26

27Stack::pop()

28{

29if(top=0)

30throwUnderflow();

31top--;

32returnv[top];

33}

从上面我们就可以看出了怎样定义一个类,这个只是堆栈的一种,可能不同类型的堆栈他们的push和pop的方法实现的不一样,这样我们为了能够提供给多个类型使用面向对象的特性“继承”。把Stack类定义为一个抽象类型,而实现抽象类型中的方法的不同类型也称为多态类型。我们需要借助关键字virtual来声明,例如我们只要把上面的push和pop方法的声明改成如下所示:

virtualvoidpush(charc)=0;

virtualcharpop()=0;

从上面我们可以看到声明后带着“=0”这个表示在继承的子类中必须重写此方法[如果你熟悉C#的话,我觉得这就是抽象abstract]。当然当我们应用到其他函数中是可以声明一个引用变量如下所示:

voidf(Stack&s);

这样将继承的子类实例引用到f的参数中就可以实现了[C#和这个很像,也许C#就是从这边接过来的东西,我是.NET的开发人员对此也比较熟悉就不多说了]。当我们子类继承基类时具有几个访问权限,通常我们使用的都是public关于这个我们在以后还会碰到这里就不多说了,要继承一个基类,必须包含基类的头文件,并在声明类的时候通过":"来实现继承如:ListStack:public Stack,子类的实现方式和其他一样。

本文转自网魂小兵博客园博客,原文链接:/xdotnet/archive//09/17/cplusplus_pdl_notes_one.html,如需转载请自行联系原作者

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。