помогите с кодом. наследование

337
01 января 2018, 11:37
class Date {
    public:
    int year;
    int month;
    int day;
public:
    Date(int year, int month, int day)
    {
        cout << "Year " << year << " " <<  "Month " << month << " " << "Day " << day << endl;
    }

};

class Person : public Date {
public:
    string name;
    string surname;
public:
     Person(int year, int month, int day, string name, string surname) : Date(year, month, day)
   {
         cout << "Birthday"<< year << "." << month << "." << day << "." << endl;
         cout << "Name"<< name << "," << "Surname" << surname << endl;
    }
};

При создании Обьекта типа Person

int main (){
Person obj2(2017, 23, 9, "Marina", "Said");
return 0;
}

СОздается еще и обьект типа Date

Year 2017 Month 23 Day 9
Birthday2017.23.9.
NameMarina,SurnameSaid

**

Как сделать так что бы при создании обьекта типа Person не вылазил еще в придачу обьект типа Date

Answer 1

Не хотите тянуть за Person объект Date - уберите наследование, другого пути нет.

При вызове конструктора класса потомка вызываются конструкторы всех его предков.

Answer 2

Объект будет "вылазить", т.е. будет создаваться в любом случае - что при наследовании, что при композиции...

Вам уже говорили, что вы нарушаете сам принцип. Но если ваше наследование вам так дорого...

Вас же на самом деле раздражает не создание объекта - а вывод на экран. Ну отключите его. Вообще выбросьте.

Или добавьте лишний параметр в конструктор - выводить или нет:

Date(int year, int month, int day, bool out = true)
{
    if (out) cout << "Year " << year << " " <<  "Month " << month 
                  << " " << "Day " << day << endl;
}
...
Person(int year, int month, int day, string name, string surname)
     : Date(year, month, day, false)
{

Или сделайте еще один конструктор - скажем, по умолчанию (кстати, зачем вы сделали все члены Date открытыми?) - и руками работайте:

Date():yaer(0),month(0),day(0)
{
}
...
Person(int year, int month, int day, string name, string surname)
{
    this->year = year;
    this->month = month;
    ...

Все равно после наследования от Date от любой затычки хуже чем есть, уже не будет...

READ ALSO
Агрегация для чайников [требует правки]

Агрегация для чайников [требует правки]

Какие есть соотношения между классами? Сколько этих соотношений? И интересует Агрегация (я так понимаю, это один из видов отношения между...

392
Чтение из com port с++

Чтение из com port с++

Есть код

490
Чтение файла с помощью ifstream

Чтение файла с помощью ifstream

С текстом все еще хорошоИспользую:

277
Заполнение и поиск в двумерном массиве

Заполнение и поиск в двумерном массиве

Всем привет, работаю с двумерным массивом таким образом заполняю:

275