`
kmplayer
  • 浏览: 508880 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

条款35:确定你的public继承,模塑出"isa"的关系

阅读更多
1,C++面向对象程序设计最重要的原则:
public继承意味着"是一种(isa)"的关系.
例如:
class D : public class B
你便告诉编译器,每一个型别为D的对象同时也是型别为B的对象.
只要是B对象派得上用场的地方,D对象也可以派上用场.

2,看一个实际和理论偏离的例子:
class Bird
{
public:
virtual void fly(); //鸟可以飞
...
};

class Penguin : public Bird//企鹅是一种鸟,
{
...
}
//但是是不能飞的.
可见"适用于所有软件"的完美设计是不存在的,最佳设计,取决于系统希望做什么事.
如果你的程序对于飞行一无所知,那么上述设计也不失为完美有效.

3,如果一定考虑飞行,可以这么做.
class Bird //不声明fly
{
public:
};

class FlyBird : public Bird//可以飞的鸟,
{
public:
virtual void fly();
...
}

class NonFlyBird : public Bird//不可以飞的鸟,
{
public:
... //没有声明fly
}

class Penguin : public NonFlyBird//企鹅是一种鸟,
{
...//没有声明fly
}
分享到:
评论

相关推荐

    Effective.C++.中文第二版.50条款doc文档.chm

    条款35: 使公有继承体现 "是一个" 的含义 条款36: 区分接口继承和实现继承 条款37: 决不要重新定义继承而来的非虚函数 条款38: 决不要重新定义继承而来的缺省参数值 条款39: 避免 "向下转换" 继承层次 条款40: 通过...

    Effective C++(第三版)

    条款32:确定你的public继承塑模出is-a关系 make sure public inheritance models “is-a.” 条款33:避免遮掩继承而来的名称 avoid hiding inherited names. 条款34:区分接口继承和实现继承 differentiate between...

    Effective C++ 中文版

    条款32:确定你的public继承塑模出is-a关系 条款33:避免遮掩继承而来的名称 条款34:区分接口继承和实现继承 条款35:考虚virtual函数以外的其他选择 条款36:绝不重新定义继承而来的non-virtual函数 条款37:...

    Java语言程序设计:第四章 继承与多态.ppt

    Java语言程序设计第四章 继承与多态 本资源摘要信息主要讲解Java语言程序设计第四章中的继承与多态概念。继承是一种机制,允许一个类继承另一个类的成员变量和方法,从而实现代码的重用。多态是指一个类的对象可以...

    java 类的继承 基础理解

    2. 继承关系建模:继承可以建模现实世界中的继承关系,如车辆的继承关系,即 Car 。 3. 提高代码的灵活性:继承允许子类继承父类的方法,并可以重写这些方法以满足新的需求。 继承的类型: 1. 单继承:一个子类...

    Hibernate继承映射的第一种策略:每棵类继承树对应一张表

    Hibernate继承映射是将Java类的继承关系映射到数据库表的一种策略,使得对象模型的复杂性能够平滑地转化为关系数据库模型。本篇将详细介绍Hibernate继承映射的第一种策略——每棵类继承树对应一张表,即单一表继承...

    C++语言程序设计:第07章 继承与派生.pptx

    在C++编程中,继承与派生是面向对象编程的核心概念,它们允许我们构建复杂的软件结构,实现代码复用,以及更好地模拟现实世界中的对象和关系。本章主要讲解了以下几个方面: 1. 类的继承与派生: - 继承是指一个类...

    c++String类的重写

    赋值运算符(=)**:`std::string`类中已经有一个默认的赋值运算符,但如果你希望在复制字符串时执行特殊操作(例如深拷贝),你可以重写这个运算符。例如: ```cpp class MyString : public std::string { public: ...

    C 程序设计课件:第八章 继承与多态.ppt

    通过`class DerivedClass : access-specifier BaseClass`这样的语法实现继承,其中`DerivedClass`是派生类,`BaseClass`是基类,`access-specifier`可以是`public`、`protected`或`private`,分别代表公有继承、保护...

    C 程序设计课件:第16章 继承.ppt

    示例代码展示了`Student`类和`GraduateStudent`类的继承关系,其中`GraduateStudent`是`Student`的公有派生类,继承了`Student`的属性和方法,并添加了新的成员。通过`public`关键字,`Student`类的公有和保护成员在...

    面向对象程序设计C++:第4章 继承.ppt

    继承树是描述类继承关系的图形表示,每个子类都继承了祖先类的所有属性和行为。派生方式有两种:公有派生(public)和私有派生(private)。公有派生下,基类的公有和保护成员在派生类中保持原有的访问权限;私有...

    C++虚拟多重继承对象模型讨论-样例

    在C++编程语言中,虚拟多重继承(Virtual Multiple Inheritance,VMI)是一种高级特性,它允许一个类从多个基类继承,其中一个或多个基类可能是通过其他基类间接继承的。这种继承方式的主要目的是解决“菱形问题”...

    学习笔记:抽象封装、继承、多态.doc

    ### 学习笔记: 抽象封装、继承、多态 #### 一、面向对象的基本概念 面向对象编程(Object-Oriented Programming, OOP)是一种编程范式,它使用“对象”来设计软件。对象是由数据(即字段或属性)和对这些数据进行...

    C++程序设计课件:4 继承与多态.ppt

    本节课程主要讲解了C++编程语言中的继承和多态性相关知识,涉及到继承的概念、继承类型、继承体现的思想、基类和派生类的关系、单继承、多继承、纯虚函数和抽象类等。 继承是面向对象编程中一个重要的概念,指的是...

    【小白系列之骐程3】类的继承.txt

    继承:即生活中的包含关系;(大三学生继承于大学生,大学生继承于学生) 特点:可以多层次继承(多少层都可以),但是每次只能继承一个 子类可以调用(继承)父类的属性和方法,不需要再定义属性,方法。 ...

    Public_public_

    在C#编程语言中,`public` 是一个访问修饰符,它在类、接口、方法、属性、事件和字段的定义中广泛使用。本压缩包文件"Public_public_"可能包含了一系列与C#中使用`public`关键字相关的示例或教程。下面我们将详细...

    C++ 程序设计课件:第八章 继承与多态.ppt

    C++的继承与多态是面向对象编程中的核心概念,为代码复用和设计灵活性提供了基础。继承允许创建一个新的类,即派生类,它基于现有的类(基类或超类)并可以扩展其功能。这体现了从简单到复杂的认识过程,通过层次...

    高效C++:从C到C++

    **条款14:确定基类有虚析构函数** - **背景**:当一个类作为其他类的基类时,应确保其析构函数为虚函数。 - **原因**:如果没有虚析构函数,通过基类指针删除派生类对象时会导致资源泄露。 - **示例**: ```cpp ...

Global site tag (gtag.js) - Google Analytics