Мои занятия extPersonType
наследуется от 3 других классов. Программа компилируется без ошибок, но по какой-то причине строка relation
а также phoneNumber
не показывайся Вся остальная информация, которую я прошу, делает. Где моя проблема?
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;
}
Это потому, что вы их нигде не инициализируете
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)
{
}
Вы не должны забывать назначать / инициализировать ваши переменные в конструкторе
Кроме того, это рекомендация, но я не думаю, что наследование здесь необходимо. Вы должны использовать композицию.
class extPersonType
{
private:
string relation;
string phoneNumber;
addressType address;
personType person_name;
dateType date; // birthday ?
}
Вы должны назвать это как
my_home.print();
Вы, вероятно, смущены тем, как это объявлено:
void extPersonType::print(){ <..> }
Здесь extPersonType::
part просто сообщает компилятору, что funciton является частью класса. Когда вы вызываете функцию, вы уже вызываете ее для определенного объекта класса (в вашем случае my_home
), поэтому вы не должны использовать имя класса.
Вы на самом деле не инициализируете переменные члена класса. Вам нужно сделать что-то вроде следующего, чтобы инициализировать relation
а также phoneNumber
Участники:
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
{
}
Я подозреваю, что вам может понадобиться сделать что-то подобное с addressType
, personType
, а также dateType
конструкторы базового класса.