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() ");
    }

  • 相关阅读:
    团队开发第二阶段
    每日日报
    每日日报
    每日日报
    每日日报
    每日日报
    C++类class和结构体struct区别
    c++简单的类的建立与参数的两种传递方法
    C++ 使用delete删除指针
    暂存
  • 原文地址:https://www.cnblogs.com/jhcelue/p/6785314.html
Copyright © 2011-2022 走看看