2014 dxdy logo

Научный форум dxdy

Математика, Физика, Computer Science, Machine Learning, LaTeX, Механика и Техника, Химия,
Биология и Медицина, Экономика и Финансовая Математика, Гуманитарные науки




 
 Абстрактные классы [С++]
Сообщение16.12.2013, 17:48 
Лабораторная на С++.
Надо написать абстрактный базовый класс Pair с виртуальными арифметическими операциями (+ - * /). Реализовать производные классы Complex и Rational.

Ну понятно что, что надо в классе Pair сделать 4 чисто виртуальных метода, только у меня возникает вопрос: а что они будут возвращать?
Ведь Pair я вернуть не могу, т.к. класс абстрактный, а о произвольных базовый класс ничего не знает.

 
 
 
 Re: Абстрактные классы
Сообщение16.12.2013, 17:53 
Спросите у преподавателя, как он это себе представляет.
Я ничего нормального придумать не могу.

 
 
 
 Posted automatically
Сообщение16.12.2013, 18:15 
Аватара пользователя
 i  Тема перемещена из форума «Computer Science» в форум «Программирование»

 
 
 
 Re: Абстрактные классы
Сообщение16.12.2013, 18:51 
sergeysleep в сообщении #802092 писал(а):
Ведь Pair я вернуть не могу, т.к. класс абстрактный
Почему же не можете? Можете. Просто это неестественно — в данном случае был бы уместнее интерфейс [UPD: ой, это же C++], а не базовый класс, если вообще «парность» представления числа может быть где-то интересна сама по себе с такими методами (если уж делать класс для пар, было бы интереснее сделать там методы для доступа к компонентам пары; а если делать класс с такими методами, его было бы уместнее назвать Number или около того, и сделать методов или побольше (например, конструирование из целого числа), или поменьше (без деления, например)).

 
 
 
 Re: Абстрактные классы
Сообщение16.12.2013, 18:52 
Вернуть-то Pair можно: ковариантность в возвращаемом типе поддерживается, т.е. код

Код:
class Base {
public:
    virtual Base& func() { ... } = 0;
};

class Derived : public Base {
    Derived& func() { ... }
};

int main() {
    Pair *p = new Derived();
    p->func(); // вызовется Derived::func
}


работает. Но что вы собираетесь передавать параметрами?

 
 
 
 Re: Абстрактные классы
Сообщение16.12.2013, 18:57 
Операторы +,-,*,/ должны возвращать объект по значению. Если бы можно было использовать ссылку и указатель, то тогда да, решаемо.

 
 
 
 Re: Абстрактные классы
Сообщение16.12.2013, 19:16 
venco
Строго говоря, операторы могут возвращать что угодно, но да, здесь это бесполезно. В любом случае, виртуальные члены тут неуместны совершенно, такие штуки делаются дженериками или шаблонами.

 
 
 [ Сообщений: 7 ] 


Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group