![]() |
Модераторы: Daevaorn |
![]() ![]() ![]() |
|
play |
|
|||
Unregistered |
#include <iostream>
class CA // базовый класс { public: virtual int GetID() {return 0;}; virtual int GetInt() {return 0;}; virtual double GetFloat() {return 0;}; [email protected]}; class CB : public CA // для хранения целого типа { private: int value; public: CB(int _value):value(_value) {}; virtual int GetID() {return 1;}; virtual int GetInt() {return value;}; virtual double GetFloat() {return 0;}; }; class CD : public CA // для хранения вещественного типа { private: double value; public: CD(double _value):value(_value) {}; virtual int GetID() {return 2;}; virtual int GetInt() {return 0;}; virtual double GetFloat() {return value;}; }; int main(int argc, char* argv[]) { // 1 CA *b = new CB(5), *d = new CD(10.05); std::cout << b->GetInt() << " + " << d->GetFloat() << " = " << b->GetInt() + d->GetFloat() << std::endl; delete b; delete d; // 2 b = new CD(4.95); d = new CD(10.05); std::cout << b->GetFloat() << " + " << d->GetFloat() << " = " << b->GetFloat() + d->GetFloat() << std::endl; delete b; delete d; return 0; } // Как реализовать операцию сложения b и d (для класа CA) чтобы получить // указатель на CA, который конструируется при помощи CB или CD в зависимости // от наличия дробной части результата (CD в 1-ом случае, CB во 2-ом) |
|||
|
||||
cosmic |
|
|||
Новичок Профиль Группа: Участник Сообщений: 19 Регистрация: 28.9.2002 Репутация: нет Всего: нет |
CA *operator + (CA *b, CA *d)
{ double z = b->GetInt () + d->GetInt () + b->GetFloat () + d->GetFloat (); return b->GetID () == 2 || d->GetID () == 2 ? new CD (z) : new CB (z); } особенно меня порадовал e-mail в теле класса :) |
|||
|
||||
![]() ![]() ![]() |
Правила форума "С++:Общие вопросы" | |
|
Добро пожаловать!
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Earnest Daevaorn |
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | C/C++: Общие вопросы | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |