2012-10-09 42 views
0

我的課extPersonType是從3個其他類繼承。該程序編譯沒有錯誤,但由於某種原因字符串relationphoneNumber不顯示。我要求的所有其他信息的確如此。我的問題在哪裏?爲什麼我在調用print()函數時不會輸出字符串?

class extPersonType: public personType, public dateType, public addressType 
{ 
public: 
extPersonType(string relation = "", string phoneNumber = "", string address = "", string city = "", string state = "", int zipCode = 55555, string first = "", string last = "", 
    int month = 1, int day = 1, int year = 0001) 
    : addressType(address, city, state, zipCode), personType(first, last), dateType (month, day, year) 
{ 
} 
void print() const; 

private: 
string relation; 
string phoneNumber; 
}; 

void extPersonType::print() const 
{ 
cout << "Relationship: " << relation << endl; 
cout << "Phone Number: " << phoneNumber << endl; 
addressType::print(); 
personType::print(); 
dateType::printDate(); 
} 



/******* 
MAIN PROGRAM 
*******/ 

int main() 
{ 
extPersonType my_home("Friend", "555-4567", "5142 Wyatt Road", "North Pole", "AK", 99705, "Jesse", "Alford", 5, 24, 1988); 
my_home .extPersonType::print(); 
     return 0; 
} 
+2

正如一邊,使用多繼承可能不是你想如何建模關係 – Leon

回答

1

你應該把它作爲

my_home.print(); 

你被它聲明的方式大概困惑:

void extPersonType::print(){ <..> } 

這裏extPersonType::部分只是告訴編譯器,這個功能可按是班的一部分。當你調用這個函數時,你已經爲這個類的特定對象(在你的情況下爲my_home)調用它,所以你不應該使用類名。

+0

好。我使用類名的唯一原因是因爲超類或基類具有完全相同的功能。我以爲我不得不明確地調用這個類的打印功能,所以它會運行這個打印功能,而不是一個不同的。謝謝。 –

3

那是因爲你沒有用來初始化它們的任何地方

extPersonType(string relation = "", string phoneNumber = "", string address = "", string city = "", string state = "", int zipCode = 55555, string first = "", string last = "", int month = 1, int day = 1, int year = 0001) 
     : relation (relation), phoneNumber (phoneNumber)// <<<<<<<<<<<< this is missing 
      addressType(address, city, state, zipCode), personType(first, last), dateType (month, day, year) 
{ 
} 

你不應該忘記在構造

還可以指派/用來初始化的變量,這是recommandation,但我真的不認爲繼承在這裏是必要的。你應該使用構圖。

class extPersonType 
{ 
private: 
    string relation; 
    string phoneNumber; 

    addressType address; 
    personType person_name; 
    dateType date; // birthday ? 
} 
+0

這是我的問題!謝謝!!!!我在其他班上做過......但出於某種原因,不是這個。現在我覺得很愚蠢。哈哈。謝謝! –

+0

@JesseAlford感覺啞是一個好兆頭,到處尋找它,並嘗試去理解它。 –

1

你實際上並沒有初始化你的類成員變量。你需要做類似下面的初始化relationphoneNumber成員:

extPersonType(string relation = "", string phoneNumber = "", string address = "", 
    string city = "", string state = "", int zipCode = 55555, string first = "", string last = "", 
    int month = 1, int day = 1, int year = 0001) 
    : addressType(address, city, state, zipCode), personType(first, last), dateType (month, day, year), 
     relation(relation), phoneNumber(phoneNumber) // <== init mmebers 
{ 
} 

我懷疑你可能需要做的addressTypepersonType類似的東西,和dateType基類的構造函數爲好。

+0

令人驚歎!那正是我的問題。謝謝!我初始化的所有其他類成員變量。由於某種原因,這個滑過了我。謝謝! –

相關問題