`
guoyiqi
  • 浏览: 962126 次
社区版块
存档分类
最新评论

满足多态的操作符重载

 
阅读更多

操作符重载本身实现并不困难,例如

class A

{

    friend ostream& operator<<(ostream& os,const class A& a);

    {

        os<<"value"<<a.value;

    }

private:

    int value;


};

但是如果A派生了新的类,为了能让同一个输出操作符自动识别继承自A类的对象并使用恰当的输出方式,则可以给基础类一个抽象的方法,派生类重写这个方法而达到针对不同的对象在运行时使用不同的输出格式.由于输出操作符不可以为抽象的,所以可以在不改变基类的这个公共接口的前提下另写一个实现输出的抽象成员方法print(),让输出操作符去调用这个方法.这样以来每派生一个类,则只需要修改其重写的print()方法即可.所以新的A类应该是

class A

{

    friend ostream& operator<<(ostream& os,const class A& a)

    {

        a.print(os);

        return os;

    }

private:

    int value;

    virtual void print() const;


};

void A::print(ostream& os) const

{

    os<<"value "<<value;

    return os;
}

如果此时B类继承了A类,则B的输出操作符可以在不对A的设计进行任何更改的情况下简单的实现.

B类的部分应该是如下的样子

class B: public class A

{

private:

    int number;

    void print(ostream& os) const;
};

void B::print(ostream& os) const

{

    A::print(os);

    os<<"number "<<number;
}

这里的类都比较小,可以容易的看出当A,B类的输出都不叫复杂的时候改动和更改都会比较方便.

思想方法来自<<C++沉思录>>

分享到:
评论

相关推荐

    实例003——操作符重载实现编译多态——复数的加法运算.zip

    实例003——操作符重载实现编译多态——复数的加法运算 实例003——操作符重载实现编译多态——复数的加法运算 实例003——操作符重载实现编译多态——复数的加法运算

    西北农林科技大学C++实验题及代码

    1、抽象类与操作符重载 定义表示形状的抽象类及相应的派生类,并实现相关操作符重载。 (1)定义表示形状的抽象类Shape: 添加公有成员函数double Area(),用于计算形状面积;定义为纯虚函数; 添加公有成员函数void...

    C++ new、delete(new[]、delete[])操作符重载需要注意的问题

    主要介绍了C++ new、delete(new[]、delete[])操作符重载需要注意的问题,本文同时讲解了兼容默认的 new、delete 的错误处理方式、多态的问题等内容,需要的朋友可以参考下

    SQL封装、多态与重载

    本文将要为您介绍的是SQL封装、多态与重载,具体实现方法:  面向对象1.类:众多对象抽象出来的2.对象:类实例化出来的  3.类的定义关键字 class  4.类里面包含成员变量成员属性 成员方法  5.面向对象三大...

    C#程序设计

    在本书中,著名的技术作家Jesse Liberty以一种最适合有经验的程序员口味的方式--紧扣Microsoft全新.NET平台的大背景本书的第一部分介绍了C#的基础知识,进而阐释了以下内容:类与对象、继承与多态、操作符重载、...

    深入浅析SQL封装、多态与重载

    访问修饰符 private 私有的 只能在该类中访问 protected 受保护的 只能在该类和它的子类中访问 public 公有的 在任何地方都可以访问 构造方法(函数): 作用:造对象所要调用的方法,用来创建对象,可以对

    深入解析重载运算符

    详细描述了c++的四大特性之一,多态。对c++运算符的重载做了相当全面的介绍

    《java面向对象程序设计-继承和多态》教案.doc

    super () 方法始终指向调用类的父类 调用父类构造方法 演示:示例 3 多态性 2-1 多态性是指¡°多种形式¡± 它使用不同的实例而执行不同操作 多态包括方法重写和方法重载 多态性 2-2 方法重载 2-1 方法重载 2-2 ...

    C++面向对象程序设计语言ppt

    C++程序设计:面向对象编程、从C到C++、类、继承、多态、操作符重载、模板与标准模板、C++输入输出类层、MFC中的面向对象

    面向对象程序设计实验C++

    全部为C++代码 包含面向对象程序设计实验lab1、lab2、lab3、lab4、lab5、lab6、...6-实验六-操作符重载 7-实验七-静态数据成员 8-实验八-多态版的通讯录 9-实验九-非多态文件版的通讯录 10-实验十 -复数类-重载运算符

    C++范例大全

     实例3:使用操作符重载实现编译多态——复数的加法运算  实例4:使用函数模板实现不同数据类型的极值函数  1.2 C++常用的操作与算法  实例5:使用C++实现格式化数据的I/O  实例6:实现数字金额的中文大写...

    程序员面试刷题的书哪个好-CPP_Learning:记录下C++语言学习

    操作符重载 模版与泛型编程 输入输出 经典书籍 C++ Primer Effective三部曲 STL源码剖析 面试问题记录 from 牛客, 我现在的想法是C/C++方向,涉及到具体的知识有数据结构与算法,C/C++语言,计算机网络,操作系统,...

    SCALA从入门到精通个人笔记含代码

    操作符重载 模式匹配 函数式编程基础 函数式编程说明 函数定义/声明 函数运行机制 递归 函数注意事项和细节 过程 惰性函数和异常 面向对象编程初级 类和对象 包 包对象 面向对象编程中级 封装 继承 ...

    编程思想下篇

    3.14 使用操作符时常犯的错误 3.15 类型转换操作符 3.15.1 截尾和舍入 3.15.2提升 3.16 Java没有“sizeof” 3.17 操作符小结 3.18 总结 第4章 控制执行流程 4.1 true和false 4.2 if-else 4.3 迭代 4.3.1 do-while ...

    Python 简介 Python 是一个高层次的结合.rar

    它的类模式支持了诸如多态、操作符重载、多重继承等高级概念。 2、自由 Python是完全开放源码的,即可以从Internet上免费得到它的整个系统,拷贝或者在自己的系统中嵌入都可以。 3、可移植 Python是用可移植的...

    Thinking in java4(中文高清版)-java的'圣经'

    3.5.1 一元加、减操作符 3.6 自动递增和递减 3.7 关系操作符 3.7.1 测试对象的等价性 3.8 逻辑操作符 3.8.1 短路 3.9 直接常量 3.9.1 指数记数法 3.10 按位操作符 3.11 移位操作符 3.12 三元操作符 if-else 3.13 ...

    Visual C++范例大全书中405个实例的代码

    实例3:使用操作符重载实现编译多态——复数的加法运算 6 实例4:使用函数模板实现不同数据类型的极值函数 7 . . . 17.3 视频处理 695 实例402:创建基于MCI的数字视频处理类——CMyMCIVideo 695 实例403:使用...

    C++基础20个实例源代码

    实例001——实现C++类的多重继承、实例002——使用虚函数实现运行时多态、实例003——操作符重载实现编译多态——复数的加法运算等等

Global site tag (gtag.js) - Google Analytics