摘要:
有时候希望同一个方法在派生类和基类中的行为是不同的。换句话说,方法的行为取决于调用该方法的对象。这种较复杂的行为称为多态——具有多种形态。即同一种方法其行为随上下文而异。有两种重要的机制可用于实现多态公有继承: 在派生类中重新定义基类的方法。 使用虚方法。 如果要在派生类中重新定义基类的方法,通常应 阅读全文
posted @ 2019-02-23 12:38
Grooovvve
阅读(249)
评论(0)
推荐(0)
摘要:
面向对象编程的主要目的之一是:提供可重用的代码。尤其是项目很庞大的时候,重用测试过的代码比重新编码代码要好得多。 C++提供了更高层次的重用性。其中之一就是继承这个概念。 一些厂商提供了类库。类库由类声明和实现构成。类库通常是由源代码组成的,这意味着可以对其进行修改,以满足需求。但是也可以用类继承的 阅读全文
posted @ 2019-02-23 12:35
Grooovvve
阅读(396)
评论(0)
推荐(0)
摘要:
如果两种类只是数据类型不同,而其他代码是相同的,与其编写新的类声明,不如编写一种泛型(独立于类型的)栈。然后将具体的类型作为参数传递给这个类。这样就可以使用通用的代码生成存储不同类型值的栈。 可以使用typedef处理这样的需求,但是有两个问题,一、每次修改类型都必须重新编辑头文件;二、在每个程序中 阅读全文
posted @ 2019-02-23 12:27
Grooovvve
阅读(287)
评论(0)
推荐(0)
摘要:
继承使用时要注意,默认是私有派生。所以要公有派生时必须记得加关键字Public。 MI(Multi Inheritance)会带来哪些问题?以及如何解决它们? 两个主要问题: 从两个不同的基类继承同名方法; 从两个或更多相关基类那里继承同一个类的多个实例; 虚方法 Worker公有派生出Singer 阅读全文
posted @ 2019-02-23 12:24
Grooovvve
阅读(243)
评论(0)
推荐(0)
摘要:
使用包含:易于理解,类声明中包含表示被包含类的显式命名对象,代码可以通过名称引用这些对象; 使用继承:将使关系更抽象,且继承会引起很多问题,尤其是从多个基类继承时。 私有继承所提供的特性确实比包含多。 通常,应使用包含来建立has-a关系;如果新类需要访问原有类的保护成员,或需要重新定义虚函数,则应 阅读全文
posted @ 2019-02-23 12:22
Grooovvve
阅读(207)
评论(0)
推荐(0)
摘要:
对于姓名可以使用字符数组来表示,但这将限制姓名的长度。当然,还可以使用char指针和动态内存分配,但这要求提供大量的支持代码。有一个好的方法就是使用一个他人开发好的类的对象来表示。如果C++库提供了合适的类,实现起来将更简单。C++库确实提供了一个这样的类,它就是valarray。 valarray 阅读全文
posted @ 2019-02-23 12:19
Grooovvve
阅读(350)
评论(0)
推荐(0)
摘要:
C++的主要目的是促进代码重用。 公有继承是实现这一目标的机制之一; 本身是另一个类的成员,这种方法称为包含、组合、层次化。 另一种方法是使用私有、保护继承。 通常包含、私有继承和保护继承用于实现has-a关系,即新的类型包含另一个类的对象。 多重继承使得能够使用两个或更多的基类派生出新的类,将基类 阅读全文
posted @ 2019-02-23 12:17
Grooovvve
阅读(157)
评论(0)
推荐(0)
摘要:
友元和类的关系还可以更复杂。 举个例子,假设出现了交互式遥控器,交互式遥控器能够让您回答电视节目中的问题,如果回答错误,电视将在控制器上产生嗡嗡声。 这个例子的问题,可以使用新的友元关系来解决。我把它叫做相互的友情。 即一些Remote方法能够像前面那样访问Tv对象,而一些Tv方法也能影响Remot 阅读全文
posted @ 2019-02-23 11:23
Grooovvve
阅读(316)
评论(0)
推荐(0)
摘要:
接着上一篇《友元是什么》中,我们发现Remote友元类的大多数方法都是用Tv类的公有接口实现。这意味着这些方法并不是真正需要友元。 事实上唯一直接访问Tv成员的Remote方法是Remote::set_chan(),因此它是唯一需要作为友元的方法。 确实可以仅让特定的类成员成为另一类的友元。 这种做 阅读全文
posted @ 2019-02-23 11:07
Grooovvve
阅读(223)
评论(0)
推荐(0)