2014-04-08 28 views
1

我正在做一個更大的任務 - 一個虛構的網上銀行數據庫。所有的okayish,只是它需要能夠以這樣的呼籲作出迴應:Object.memberFunction(argument).MemberFunction(); - 我只是沒有得到這

bank.Account("123456").Balance(); 

銀行一類行的一個實例,它持有的數組(是的,我被禁止使用大多數的STL)的班級帳戶的對象。

想法:我需要一個函數Account & Account類(const char *)在類Bank中是類Account的朋友函數,然後可以調用Account類中聲明的Balance函數。 我正在做對嗎?我並不是真的要求你爲我寫代碼,我只想知道我是否朝着正確的方向前進。謝謝。

回答

1

是的,這是正確的方向。您的銀行類需要一個公共方法

Account& Account (const char*); 

和帳戶類需要的公共職能

int Balance(); 

其實你並不需要的「朋友」,以訪問方法,他們只是要公開。

雖然要小心你的帳戶方法。如果您輸入的帳戶名稱不存在,您將返回什麼內容?也許你應該在這種情況下返回一個空的Account對象(儘管你需要成爲你的Bank類的成員)。在這種情況下,您應該在調用Balance()之前檢查返回的Account對象是否有效。

1

您的標題中的僞代碼應該可能是object.MemberFunction1(arguments).MemberFunction2()。它都可以,它會正常工作。

如果MemberFunction1返回對象或對對象的引用,則可以將更多調用鏈接到返回的對象(或引用)。如果他們不試圖訪問和非公開成員,那麼這些班不一定是朋友。

事實上,如果返回的對象包含這反過來又返回的對象的方法,那麼你可以有

object.MemberFunction1(arguments).MemberFunction2().MemberFunction3(); 

等等等等。

+0

耶,這很酷!不知道這件事。我其實需要訪問私人會員 - 帳戶ID,所以這就是原因。或者我可以使用一個吸氣劑 - 我不確定有什麼區別,只是我覺得 - - 器官是懶惰的。 – Lea

+0

@LeaPetrášová如果你需要私人會員,你應該重新考慮你的設計。最糟糕的情況是,您添加了getter/setter函數(僅獲取或設置這些私有變量的函數),最好重新設計類以儘量減少此訪問。 –

2

我需要在類銀行功能帳戶&賬戶(爲const char *),這將是該類帳戶友元函數,然後就可以調用在Account類聲明的平衡功能。我做對了嗎?

你不需要任何friend類或函數,只是使干將public

class Bank { 
public: 
    Account & Account (const char *); 
}; 

class Account { 
public: 
    Balance& Balance(); 
}; 
+0

做到了這一點,它解決了很多問題,現在我遇到了Account函數與Account構造函數爭執的問題。啊。很多工作在我面前。 – Lea

+0

@LeaPetrášová處理一個不存在的帳戶(找不到字符串)的常用方法是拋出一個異常。你也可以在你的Bank類中有一個虛擬的'Account'類成員,它表明自己是無效的(例如,有一個id -1),並且在沒有找到匹配的賬戶的情況下返回一個引用。 –

相關問題