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()\n");
t.print("end main()\n");
}
以下樣例將實現這一功能;
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()\n");
t.print("end main()\n");
}
總結
- 上一篇: ruby 作为嵌入脚本时使用的注意事项
- 下一篇: JavaScript 日期格式化 简单有