2014 dxdy logo

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

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




Начать новую тему Ответить на тему
 
 Абстрактные классы [С++]
Сообщение16.12.2013, 17:48 


18/05/10
11
Лабораторная на С++.
Надо написать абстрактный базовый класс Pair с виртуальными арифметическими операциями (+ - * /). Реализовать производные классы Complex и Rational.

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

 Профиль  
                  
 
 Re: Абстрактные классы
Сообщение16.12.2013, 17:53 
Заслуженный участник


04/05/09
4589
Спросите у преподавателя, как он это себе представляет.
Я ничего нормального придумать не могу.

 Профиль  
                  
 
 Posted automatically
Сообщение16.12.2013, 18:15 
Админ форума
Аватара пользователя


19/03/10
8952
 i  Тема перемещена из форума «Computer Science» в форум «Программирование»

 Профиль  
                  
 
 Re: Абстрактные классы
Сообщение16.12.2013, 18:51 
Заслуженный участник


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

 Профиль  
                  
 
 Re: Абстрактные классы
Сообщение16.12.2013, 18:52 
Заслуженный участник


09/09/10
3729
Вернуть-то 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 
Заслуженный участник


04/05/09
4589
Операторы +,-,*,/ должны возвращать объект по значению. Если бы можно было использовать ссылку и указатель, то тогда да, решаемо.

 Профиль  
                  
 
 Re: Абстрактные классы
Сообщение16.12.2013, 19:16 
Заслуженный участник


09/09/10
3729
venco
Строго говоря, операторы могут возвращать что угодно, но да, здесь это бесполезно. В любом случае, виртуальные члены тут неуместны совершенно, такие штуки делаются дженериками или шаблонами.

 Профиль  
                  
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 7 ] 

Модераторы: Karan, Toucan, PAV, maxal, Супермодераторы



Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group