Можно ли использовать одинаковые функции для каждого класса - PullRequest
1 голос
/ 10 апреля 2019

У меня есть несколько классов, и у каждого из них свои методы. Все эти методы выполняют одну и ту же задачу, как вы можете видеть в моем коде. Единственная уникальная вещь - это значения title, code и credit членов, которые определены внутри классов.

Есть ли способ написать этот код так, чтобы один набор методов мог выполнять необходимые задачи (используя конкретные значения в классе, который сделал запрос к методу) для каждого класса?

Я студент университета, и из-за этого я не хочу использовать наследование, так как мы еще не изучили его.

class seng305
{
    string title = "Software design and architecture", code = "SENG305";
    int credit = 4;
public:
    seng305();
    ~seng305();
    string get_info();
    string get_title();
    int get_credit();
};


class comp219
{
    string title = "Electronics in computer engineering", code = "COMP219";
    int credit = 4;
public:
    comp219();
    ~comp219();
    string get_info();
    string get_title();
    int get_credit();
};

seng305::seng305()
{
    cout << '\t' << "Created" << endl;

}
seng305::~seng305()
{
    cout << '\t' << "Destroyed" << endl;
}
string seng305::get_info()
{
    return (code + "-" + title);
}
string seng305::get_title()
{
    return title;
}
int seng305::get_credit()
{
    return credit;
}
//--------------------------------------------------
comp219::comp219()
{
    cout << '\t' << "Created" << endl;

}
comp219::~comp219()
{
    cout << '\t' << "Destroyed" << endl;
}
string comp219::get_info()
{
    return (code + "-" + title);
}
string comp219::get_title()
{
    return title;
}
int comp219::get_credit()
{
    return credit;
}

Как видите, методы get_info(), get_title() и get_credit() делают одно и то же.

Я бы хотел, чтобы один get_info(), get_title(), get_credit() мог выполнять задачу для каждого класса.

1 Ответ

6 голосов
/ 10 апреля 2019

Нет смысла использовать отдельные классы вообще в этом примере. Достаточно одного класса, например:

class course
{
    string title, code;
    int credit;
public:
    course(const string &title, const string &code, int credit);
    ~course();
    string get_info() const;
    string get_title() const;
    int get_credit() const;
};

course::course(const string &title, const string &code, int credit)
    : title(title), code(code), credit(credit)
{
    cout << '\t' << "Created" << endl;
}

course::~course()
{
    cout << '\t' << "Destroyed" << endl;
}

string course::get_info() const
{
    return (code + "-" + title);
}

string course::get_title() const
{
    return title;
}

int course::get_credit() const
{
    return credit;
}

Затем вы просто создаете экземпляры вашего класса по мере необходимости, например:

course seng305("Software design and architecture", "SENG305", 4);
course comp219("Electronics in computer engineering", "COMP219", 4);
...

Я знаю, что вы сказали, что не хотите использовать наследование, но это может быть следующим логическим шагом, используя приведенный выше код в качестве основы:

class courseSeng305 : public course
{
public:
    courseSeng305() : course("Software design and architecture", "SENG305", 4) {}
};

class courseComp219 : public course
{
public:
    courseComp219() : course("Electronics in computer engineering", "COMP219", 4) {}
};

courseSeng305 seng305;
courseComp219 comp219;
...
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...