| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > C/C++: Общие вопросы > операторы C++ |
| Автор: play 2.10.2002, 00:31 |
| #include <iostream> class CA // базовый класс { public: virtual int GetID() {return 0;}; virtual int GetInt() {return 0;}; virtual double GetFloat() {return 0;}; playnext@narod.ru}; 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 5.10.2002, 17:26 |
| 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 в теле класса :) |