C++ 進階

來源:互聯網
上載者:User

標籤:標準   private   begin   noi   標準輸出   改進   第一個   oid   情況   

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

C++ 進階

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.