2013-12-15 41 views
-2

如果我有兩個功能A和B,A將在我們使用A時打印消息.B將使用A,但是當我使用B時,我不想打印任何東西。我怎樣才能做到這一點?在C++中如何避免使用具有cout的函數時打印消息?

double CTriangle::perimeter() const{ 
    double D = Distance(A, B) + Distance(A, C) + Distance(B, C); 
    cout << "Perimeter of this triangle is: " << D << endl; 
    return D; 
} 
double CTriangle::area() const{ 
    double p = this->perimeter()/2; 
    double Area = sqrt(p * (p - Distance(A, B)) * (p - Distance(A, C)) * (p - Distance(B, C))); 
    cout << "Area of this triangle is: " << Area << endl; 
    return Area; 
} 
+2

呃,在'A'裏面添加'if'?這裏有些微妙的東西嗎? – Potatoswatter

+0

我認爲我們需要看到一些更具體的代碼來回答這個問題。顯而易見的事情是將除了cout之外的所有代碼移動到一個單獨的方法'A1',並從A中調用(在調用之前/之後打印A中的行)和B(不打印) –

+2

這是我'已經看到了宏的合法使用,例如'#define VERBOSE_STATEMENTS'或'#define DEBUG_PRINTING'。 – Rapptz

回答

5

如何將參數添加到A(),例如,

void A(bool verbose = true) 
{ 
    if (verbose) cout << "Hello world!" << endl; 
} 

void B() 
{ 
    A(false); 
} 

int main() 
{ 
    A();   // outputs "Hello world!" 
    B();   // calls A, but no output 
    return 0; 
} 
+0

感謝您的幫助 – Rdou

3

假設你沒有在其不打印,你可以把std::cout進入狀態的功能的控制,它不會打印出任何東西,例如:

std::cout.setstate(std::ios_base::failbit); // set error flag, disabling output 
double d = this->perimeter(); 
std::cout.clear(); // clear flags, reenabling output 

,你可以合理查看流狀態的資源,也就是說,使用RAII確保流的狀態得到恢復可能是合理的。

如果你可以改變它確實不需要的輸出功能,我建議重寫這個功能,成爲兩個功能:

  1. 一個函數,它沒有做任何記錄,並實現了核心功能。
  2. 另一個功能是記錄和調用其他功能的實際功能。