2012-10-09 25 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

令人惊叹!那正是我的问题。谢谢!我初始化的所有其他类成员变量。由于某种原因,这个滑过了我。谢谢! –

相关问题