Форум программистов, компьютерный форум CyberForum.ru

Работа с массивом объектов базового и наследующего класса - C++

Восстановить пароль Регистрация
Другие темы раздела
C++ Перевод из одной системы счисления в другую http://www.cyberforum.ru/cpp-beginners/thread408436.html
Суть задачи такова: Написать программу , которая переводит число из 2-й системы счистления в 12-ю через 10-ю. Заранее спасибо!)Язык С++ Добавлено через 35 минут Вот я умею только так из 2 в 10 #include <iostream> #include <iomanip> #include <math.h> #include <conio.h> #include <String.h>
C++ Адрес объекта. Есть класс.В котором при вызове конструктора выводится адрес объекта. cout << "Hello from object: " << this << endl; Надо теперь сделать вывод в окно.Не получается сделать преобразование типов: MessageBoxA(NULL,(LPCSTR)this,"Hello from",MB_OK); http://www.cyberforum.ru/cpp-beginners/thread408427.html
комметарии к задаче C++
мне помогли решить задачу, но нужно еще дописать комментарии. Кое-где я уже написала их, но как писать остальные не совсем понимаю. Помогите, пожалуйста! #include "iostream.h"//подключаем заголовочный файл iostream.h #include "conio.h"//подключаем заголовочный файл conio.h #include "math.h"//подключаем заголовочный файл math.h double Taylor(double x, double eps, int count) { double...
Найти НОД 2-ух чисел C++
Я в Си новичок,очень много чего там не знаю....мне хотелось бы узнать как найти НОД 2-ух чисел Добавлено через 1 минуту ааа....всё я уже нашул как это делается!!!
C++ Ошибка при инициализации статистической переменной. http://www.cyberforum.ru/cpp-beginners/thread408409.html
Ребят есть задание: В класс строки (пользовательский класс ) добавить статическую защищенную (protected) переменную "счетчик количества созданных объектов", изначально инициализировать ее нулем. Пытаюсь сделать так (фрагмент кода),выдаёт ошибку: class CMyString{ char *pStr; protected: static int num;
C++ классы и объекты. структура-пара поле first- дробное положительное число, катет а прямоугольного треугольника; поле second - дробное положительное число, катет b прям. треуг. реализовать метод hypotenuse()- вычисление гиподенузы. в задании должно присутствовать 1. метод инициализации Init; метод должен контролировать значения аргументов на корректность. 2. ввод с клавы Read. 3. вывод на зкран Display. трудность с 1.... подробнее

Показать сообщение отдельно
BlackDemAn
Сообщений: n/a
15.12.2011, 21:01     Работа с массивом объектов базового и наследующего класса
Написал базовый класс Fraction несократимых положительных дробей и наследующий от него класс Rational чисел вида целая часть + дробная часть (здесь используется Fraction).
Реализация классов:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
#include <iostream>
#include <typeinfo>
 
using namespace std;
 
class Fraction
{
public:     int a,b;
    
            Fraction    () {};
            Fraction    (int aa, int bb) {a=aa;b=bb;reduce();}
            Fraction    (Fraction  & p) {*this = p;}
            
            virtual void reduce();
 
            Fraction operator+ (const Fraction & r);
            Fraction &operator= (const Fraction  & r);
 
            friend istream & operator>> (istream &, Fraction  &); 
            friend ostream & operator<< (ostream &, const Fraction  &);
 
            virtual void show () {cout<<a<<'/'<<b<<endl;} 
};
 
class Rational: public Fraction
{
public:     int n;
    
            Rational () {};
            Rational (int nn, int aa, int bb) : Fraction(aa,bb) {n=nn; reduce();}
            Rational (Rational  & p) {*this = p;}
            Rational (Fraction f) {n=0; a=f.a; b=f.b; reduce();}
 
            void reduce();
 
            Rational operator+ (const Rational & r);
            Rational &operator= (const Rational & r);
 
            friend istream & operator>> (istream &, Rational  &); 
            friend ostream & operator<< (ostream &, const Rational  &);
 
            void show () {cout<<n<<'+'<<a<<'/'<<b<<endl;}
 
};
Функции:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
#include "header.h"
 
void Fraction::reduce ()    {   
                            int nod, x, y; 
                            x=a; y=b; 
                            while (x!=0 && y!=0) {if(x>=y) x=x%y; else y=y%x;};
                            nod=x+y;
                            a=a/nod;
                            b=b/nod;
                            }
 
Fraction Fraction::operator+ (const Fraction & r)   {
                                                    Fraction n(r.a*b+a*r.b, r.b*b);
                                                    n.reduce();
                                                    return n;
                                                    }
 
Fraction &Fraction::operator= (const Fraction  & r) {
                                                    a=r.a;
                                                    b=r.b;
                                                    return *this;
                                                    }    
 
void Rational::reduce()     {
                            n=n+a/b;
                            a=a%b;
                            int nod, x, y; 
                            x=a; y=b; 
                            while (x!=0 && y!=0) {if(x>=y) x=x%y; else y=y%x;};
                            nod=x+y;
                            a=a/nod;
                            b=b/nod;
                            }
 
Rational Rational::operator+ (const Rational & r)   {
                                                    Rational tmp(n+r.n, a*r.b+r.a*b, b*r.b);
                                                    return tmp;
                                                    }
 
Rational &Rational::operator= (const Rational & r)  {
                                                    n=r.n;
                                                    a=r.a;
                                                    b=r.b;
                                                    return *this;
                                                    }
 
istream & operator>> (istream & in, Fraction  & p)
{
    in >> p.a >> p.b;
    p.reduce();
    return in;
}
ostream & operator<< (ostream & out, const Fraction  & p)
{
    out << p.a << "/" << p.b ;
    return out;
}
 
istream & operator>> (istream & in, Rational  & p)
{
    in >> p.n >> p.a >> p.b;
    p.reduce();
    return in;
}
ostream & operator<< (ostream & out, const Rational  & p)
{
    out << p.n << "+" << p.a << "/" << p.b ;
    return out;
}
По сути задачи мне даётся массив, состоящий из объектов как базового так и наследующего классов. В нём надо посчитать кол-во элементов одного класса, и кол-во элементов другого.
Моя программа:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
#include "header.h"
 
void main() 
{
Fraction *pF[]={ new Rational(2,4,3), new Fraction(7,8), new Rational(6,7,8), new Fraction(7,5), new Fraction(10,100)};
 
for (int i=0;i<5;i++) (*pF[i]).show();
 
Rational simple_rat(1,1,1);
Fraction simple_frac(1,1);
int kol_rat=0, kol_frac=0;
 
for (int i=0;i<5;i++) if (typeid(*pF[i])==typeid(simple_rat)) kol_rat++; else if (typeid(*pF[i])==typeid(simple_frac)) kol_frac++;
 
cout<<"Rational: "<<kol_rat<<endl<<"Fraction: "<<kol_frac<<endl;
}
Проблема в том что задать массив я могу только приведённым выше способом. Интересует как задавать его с клавиатуры.
Моя идея в том, чтобы сначала просить ввести какого класса будет вводимый объект(к примеру "f" если fraction и "r" если rational), а потом считывать и заносить в массоив. Но никак это реализовать не получается.
P.S. Замечания по остальному коду также приветствуются
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
 
Текущее время: 21:39. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru