zoukankan      html  css  js  c++  java
  • C++ 进阶

    C++面对对象设计其中常常涉及到有关跟踪输出的功能,这是C++进阶的一个非常基础的问题;

    以下样例将实现这一功能;

    class Trace {
    public:
    Trace() { noisy = 0; }
    void print(char *s) { if(noisy) printf("%s", s); }
    void on() { noisy = 1; }
    void off() { noisy = 0; }
    private:
    int noisy;
    };


    上述样例中用一个noisy跟踪输出;
    另外,因为这些成员函数定义在Trace类自身的定义内,C++会内联扩展它们。所以就使得即使在不进行跟踪的情况下。在程序中保留Trace类的对象也不必付出多大的代价,。仅仅要让print函数不做不论什么事情,然后又一次编译程序,就能够有效的关闭全部对象的输出;

    还有一种改进:

    在面对对象时,用户总是要求改动程序;比方说。涉及文件输入输出流。将要输出的文件打印到标准输出设备以外的东西上;


    class Trace {
    public:
    Trace() { noisy = 0; f = stdout; }
    Trace(FILE *ff) { noisy = 0; f = ff; }
    void print(char *s) { if(noisy) fprintf(f, "%s", s); }
    void on() { noisy = 1; }
    void off() { noisy = 0; }
    private:
    int noisy;
    FILE *f;
    };

    Trace类中有两个构造函数。第一个是无參数的构造函数,其对象的成员f为stdout,因此输出到stdout。还有一个构造函数同意明白指定输出文件!

    完整程序:

    #include <stdio.h>

    class Trace {
    public:
    Trace() { noisy = 0; f = stdout; }
    Trace(FILE *ff) { noisy = 0; f = ff; }
    void print(char *s) { if(noisy) fprintf(f, "%s", s); }
    void on() { noisy = 1; }
    void off() { noisy = 0; }
    private:
    int noisy;
    FILE *f;
    };


    int main()
    {
    Trace t(stderr);
    t.print("begin main() ");
    t.print("end main() ");
    }

  • 相关阅读:
    关于aspx消除源代码的第一行空行(一步搞定!!!)
    考虑
    一段时间没来园子了
    随便写写
    自考群网站功能说明
    打开一个别人的代码遇到的问题
    i7 4790 z97ar ssd 固态硬盘 装机的一些经历
    我编程遇到的问题,解决方法与大家分享
    学习,学习,还是学习
    准备考试
  • 原文地址:https://www.cnblogs.com/jhcelue/p/6785314.html
Copyright © 2011-2022 走看看