c++学习记录七:多态性:对象独立性(抽象类,虚函数)

(本文来自c++简明教程)
对象要想真正有用,就必须具有独立性。每个对象都应该相当于一台微型计算机,能发送并响应消息。只要一个新的对象类型使用了恰当的接口,你就应该能够把它“插接”到现有的软件上。
从字面意义上看多态性意味着“多种形式”。在最基本的级别上,它意味着以多种方式实现相同的操作。它最重要的意义在于,无需更改使用了一个对象的代码,就能将对象替换成另一个对象类型,而程序仍能正常工作。
打个比方。你的子处理软件能和你购买的任何打印机正确地交互。你甚至可以在5年之后,拔除用旧的打字机,接上一台当前尚未问世的打字机。今天写字处理软件的人不需要知道所有规格的打印机的详细信息。
这正是“多态性”存在的理由:使用所有软件对象都能像硬件组件那样工作,它们能协同工作,并根据需要进行置换。旧的软件能顺利连接较新的软件······那自是“重用性”的含义。

阅读更多

c++学习记录六:继承

(本文来自c++简明教程)
类最突出的一个特性就是“子类化”(subclassing),也就是一个类从以前定义好的一个类继承它的成员。处于几方面的原因,这个特性显得非常重要。
第一个原因是子类化处理允许你定制现有的软件。你可以拿到别人创建的一个类,在上面添加自己独有的新功能。还可以覆盖类的任何或者全部功能。这样一来,类就具有了扩展性和重用性(我保证这是你在本章见到的最后两个专业术语)。
听起来似乎很不错……有时的确如此!但是,考虑到本章要讨论的一些技术原因,你的工作并非总是那么轻松。最起码,你必须修订所有构造函数。
使用一个继承层次结构和创建接口时,也需要用到“子类化”技术,详情将在下一章讨论。

阅读更多

c++学习记录五:析构函数、this关键字和string类

(本文来自c++简明教程)
随着你操纵类的技能越来越熟练,迟早会面临资源管理的问题。
更具体地说,当你设计出特定类型的对象时,程序代码必须要求系统分配一些资源。其中,最常用的资源类型就是内存。正如本章要说明的那样,资源管理会造成一些特殊的问题。不过,辛运的是,c++提供了专门的特性来解决这些问题。
本章展示了如何写一个高级的String类,它简单而又全面地演示了资源管理问题。
说到这个类的目的,它和大多数类一样,都是隐藏细节。操纵字符串时,必须和内存打交道,而String类的宗旨就是让类的用户不必关系内存的分配和回收问题。简单地说,String类封装了char数组,并对它们进行处理,使字符串在类的用户面前表现为一种简单的数据类型,而不是一个复杂的结构。
注意:本章描述的String类是c++中的string类的一个简单版本。假如你的编译器提供了用于支持string类的库,就不必使用本章定义的这个类。不过,通过学习自己编写这样的一个类,有助于你掌握c++面向对象编程时的一些重要概念。尤其是,本章使用String类来展示this关键字、析构函数以及“深拷贝”的概念。


阅读更多

c++学习记录四:New操作符和StringParser类

(本文来自c++简明教程)
本文要强调的一个重点在于,类和面向对象编程并没有什么神秘之处,和其他某些书强调的不同,类之所以有用,并不是因为它是一个类,而是因为它提供了一系列相互练习的服务,能够解决一般性的编程问题。
一个常见的编程任务是获取输入,并对其进行分析。本章将介绍一个StringParser类,它能将一个输入字符串分解成一系列子串,每个子串中都包含一个单词。
注意:该类的大多数功能已经有strtok库函数提供。但是,你仍然有必要知道如何写一个功能相似的类。另外,strtok库函数的一个缺点在于,它不能同时扫描多个字符串,但是,采取面向对象的编程的方式,这就不是个问题。

在讨论这个类的过程中,本章还讨论了new关键字,它是c++中用于操纵类的最有用的关键字之一。简单地说,使用这个关键字允许你申请内存,为可能要用到的新变量留出足够的空间。

阅读更多

c++学习记录三:操作符函数

(本文来自《c++简明教程》)


完成了前两章的学习之后,我们应该掌握了如何写一个自己的类,使其能像标准数据类型那样使用。
但是,相较于真正的标准数据类型,目前写的类还存在一些不足。对于int,float,double和char等标准数据类型,它们最重要的一个特定就是,可以直接对它们进行操作。事实上,没有这些操作符,很难在c++中执行任何运算。
c++允许你为自己的类的对象定义如何执行这些运算(比如加,减,乘,除)。还可以为类的对象定义一个“测试相等性”操作符,以便判断两个对象是否“相等”。如此依赖,你的类才会变得真的与基本数据类型相似。

阅读更多

c++学习记录二:构造函数

(本文来自《c++简明教程》)
##构造函数入门
构造函数(constructor)是c++用于描述“初始化函数”的一个术语,这种函数告诉编译器如何解释下面这样的声明:
Fraction a(1, 2); // a = 1/2
基于前面介绍过的有关Fraction类的知识,你或许已经猜到,这个声明等价于以下语句:

阅读更多

c++学习记录一:Fraction类

(本文来自《c++简明教程》)

Point:一个简单的类

在讨论Fraction类之前,先来看一个简单的类,以下是c++ class关键字的常规语法:

阅读更多

const限定符

有时我们希望定义这样一种变量,它的值不能被改变。例如,用一个变量来表示缓冲区的大小。使用变量的好处是当我们觉得缓冲区大小不再合适时,很容易对其进行调整。另一方面也应随时警惕防止程序一不小心改变了这个值。为了满足这一要求,可以用关键字const对变量的类型加以限定:

阅读更多

C++函数之指针形参

当执行指针拷贝操作时,拷贝的是指针的指。拷贝之后,两个指针是不同的指针。因为指针可以间接地访问它所指的对象,所以通过指针可以修改它所指的对象。

阅读更多