2013-08-22 28 views
0

我覺得問題的標題有點混亂,所以我會解釋一下。我可以使用非默認數據類型作爲1行函數的參數嗎?

讓我們看看這個非常簡單的代碼。

#include <iostream> 

class C { 
public: 
    int val; 

    C(){ 
     val = 2; 
    } 

    void changeVal(int i){ 
     val = i; 
    } 

}; 

void printout(int val){ 
    std::cout << "int val : " << val << std::endl; 
} 

void printout(C c){ 
    std::cout << "class val : " << c.val << std::endl; 
} 

int main() 
{ 
    C c; 
    printout(1); 
    printout(c);  

    //printout(C()); // ok, I can understand it. 
    //printout(C().changeVal(0)); /// ????? 
    return 0; 
} 

正如你所看到的,功能「打印」是打印出來的輸入參數。 我的問題是,當我使用int值(默認數據類型),然後我只是放入函數實數'1',但是,當我使用我的類實例('類C'),那麼我必須聲明我的函數之前的類實例。

那麼,有沒有什麼辦法可以使這種函數參數的非默認數據類型在1行

實際情況是,我必須使用4x4矩陣作爲一些函數的參數。 因此,我必須做一些矩陣,並初始化(使零),並使用它。 但是如果我只用1行就能完成同樣的工作,我的源代碼將比現在更清晰。

這是我的問題。我希望你能理解我的問題。謝謝。

+0

我已經刪除了C標籤。 'class'和''的使用意味着這個問題只關於C++ – simonc

+0

您是否可以打印輸出(C())' –

+0

Btw不確定您的意思是「默認數據類型」,「內置語言數據類型/原始類型「會更好 –

回答

2

您可以通過臨時:

printout(C()); 

需要注意的是,因爲你不需要C參數的副本,它會更有意義的常量引用傳遞:

void printout(const C& c) { ... } 
+0

謝謝你的回答。然後我想再問一個問題。我可以使用我的成員函數進行類似的初始化嗎? – CIMPLE

+0

我加了'changeVal'功能。我想將我的成員變量'val'初始化爲0,然後我將使用'changeVal'函數。我可以在1行中爲函數參數做這項工作嗎? – CIMPLE

+0

@CIMPLE如果你想將'val'初始化爲'0',你不需要調用'changeVal'。你可以這樣編寫默認構造函數:'C():val(0){}'或甚至'C():val(){}'。 – juanchopanza

相關問題