2011-02-16 14 views
2

所以我試圖定義一個類,我正在使用另一個類的另一個數組來定義它。C++:在嵌套類定義(OOP)中使用數組

//header file for Name.h 
class Name { 
    string last; 
    string first; 
}; 

//header file for Depositor.h 
    class Depositor { 
     Name name; 
     string ssn;}; 



//header file for Account.h 
    class Account { 
     Depositor depositor; 
     int acctnum; 
     string type; 
     double balance; 
    }; 

//header file for Bank.h 
#include "Account.h" 
class Bank { 
    Account account[]; //is this possible? 
    int active_accts; 
}; 

當我編寫cpp文件時,我遇到了很多問題!

//example of mutator 
void Bank::setLastname(string lastname) 
{ 
    account.setLastname (lastname); 
} 

我不包括我寫入頭文件的存取器和acessors,但它們的存在,並會公開 - 它不會編譯。 你能幫忙嗎?在Bank.h中使用一個類的數組甚至是有效的嗎?

回答

0

通過聲明在頭文件中的數組的值,並通過在可以解決所有問題,並把它作爲一個陣列的cpp文件添加的變量。

//header file 
class Bank { 
    Account account[100]; 
    int active_accts; 
public: 
//mutator 
void setLastname (string,int); 
}; 

//the implementation file 
void Bank::setLastname (string last, int index) 
{ 
    account[index].setLastname(last); 
} 

這將解決所有的問題

2

它甚至可以在Bank.h中使用一個類的數組嗎?

是的,但它必須有一個固定的尺寸,例如,

Account account[3]; 

A型總是具有C++中的固定尺寸的,並且由於類的大小的數組成員變量構成部分,則需要指定數組中有多少個元素。

如果你不知道你要多少元素需要,你可以使用一個序列容器:

std::vector<Account> account; 
+0

當然,一個成員數組的大小可以通過*非類型模板參數指定*。這就是[Boost.Array](http://www.boost.org/doc/libs/release/doc/html/array.html)的工作原理。 – 2011-02-16 03:23:42

+0

@In:當然,但它仍然是類型的一部分; `boost :: array `下的數組的維數爲3:它是已知的並且是固定的,`boost :: array `是與`boost :: array `不同的類型`。 – 2011-02-16 03:32:12

+0

對。 OP在編譯期間的某個時間仍然需要提供數組的大小。 – 2011-02-16 03:36:01

0

accountAccount秒的陣列,這意味着你需要做這樣的事情account[0].setLastname(lastname);

0

不用數組,而是考慮使用矢量。

#include <vector> 

// ... 

class Bank { 
    std::vector<Account> accounts; 
    int active_accts; 
}; 
+0

是的,雖然active_accts可能是試圖管理大小,哪個矢量爲你處理,然後它會被丟棄。 – 2011-02-16 01:35:07

0

您不能在整個數組上調用setLastname(lastname)。你需要調用它的客戶類的特定實例的數組內,像這樣:account[0].setLastname(lastname);

在另一方面,你真的應該被存儲指針數組帳戶對象。

1
  • Account不是嵌套類BankBank有一個成員類型Account數組的數據實例。

  • 您可以在類中擁有基本數組成員,但是您必須在類定義中指定數組的大小:Account account[42];。原因是當你在另一個編譯單元中定義了類定義,然後實例化類的一個實例時,編譯器需要知道該實例的大小。

  • 使用std::vector<Account>而不是原始數組是明智的想法。 std::vector在施工時不需要承諾特定尺寸;它動態增長。 std::vector如何在類定義中不需要大小,而基元數組呢? A std::vector將成員指針保存爲堆上的元素。所以編譯器確實知道std::vector的大小;它使用指針的大小而不是元素的數量。