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

Виртуальная функция, принимающая объекты поочередно - C++

Восстановить пароль Регистрация
 
Maxvell_2010
1 / 1 / 0
Регистрация: 19.05.2013
Сообщений: 23
28.05.2014, 21:14     Виртуальная функция, принимающая объекты поочередно #1
есть класс у него 2 дочерних, есть статическая функция вызывающая ф-ю вывода на экран все объетты класса+дочерние, нужно написать такую же виртуальную функцию, что бы она принимала только по одному объекту\
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
    #include <iostream>
    using namespace std;
 
    class A
    {
    private:
    int a;
    public:
    A()
    {
        a=0;
    }
    A(int d)
    {
        a=d;
    }
    virtual void print();
    static void out(A** m, int elementsNum)
    { 
        for(int i = 0; i < elementsNum; i++)
            m[i]->print();
    }
    };
    class B: public A
    {
    private:
    int b;
    public:
    void print()
    { 
        cout<< "B="<<b<<endl;
    A::print();}
    };
    class C: public B
    {
    private:
    int c;
    public:
 
    void print()
    { 
        cout<< "C="<<c<<endl;
    B::print();}
    };
 
    int main()
    {
 
    int elementsNum = 3;
    A **mass = new A*[elementsNum];
    mass[0] = new C;
    mass[1] = new B;
    mass[2] = new A;
 
A::out(mass, elementsNum);    
    return 0;
 
    };
есть такая мысль:
C++
1
2
3
4
5
6
7
8
switch (?? i)          //вот не знаю каких должен быть тип объекта что бы можно было так передавать объект  
{
A: obj=A;
B: obj=B;
C: obj=C;
}
void f( ??? =obj)  // тут через виртуальную наверное надо сделать но опять же тип объекта я хз 
{ obj-> print();}


помогите пожалуйста
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
28.05.2014, 21:14     Виртуальная функция, принимающая объекты поочередно
Посмотрите здесь:

C++ Есть функция A принимающая прараметром указатель на функцию B. Как вместо последнего вставить тело B?
Ошибка 1 error C2064: результатом вычисления фрагмента не является функция, принимающая 0 аргументов C++
результатом вычисления фрагмента не является функция, принимающая 1 аргументов C++
C++ error C2064: результатом вычисления фрагмента не является функция, принимающая 0 аргументов
Функция, принимающая двумерный массив C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
zss
Модератор
Эксперт С++
 Аватар для zss
5943 / 5548 / 1783
Регистрация: 18.12.2011
Сообщений: 14,170
Завершенные тесты: 1
28.05.2014, 21:31     Виртуальная функция, принимающая объекты поочередно #2
Не совсем понял Вашу задачу, но разве присваивание базовому адресу адреса производного класса ее не решает?
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
A *pa;
B b;C c;
char cl;
cin>>cl;
switch(cl)
{
case 'b'
    pa=&b;
    break;
case 'c'
    pa=&c;
    break;
}
pa->print();
Maxvell_2010
1 / 1 / 0
Регистрация: 19.05.2013
Сообщений: 23
28.05.2014, 21:42  [ТС]     Виртуальная функция, принимающая объекты поочередно #3
это должен быть метод, который как бы поочередно выводи все обекты класса+дочерних, т.е. мы передаем ему 1 обект, а он выводит все т.к. тема виртуальные ф-ции думаю это надо сделать через виртуальную функцию
zss
Модератор
Эксперт С++
 Аватар для zss
5943 / 5548 / 1783
Регистрация: 18.12.2011
Сообщений: 14,170
Завершенные тесты: 1
28.05.2014, 21:47     Виртуальная функция, принимающая объекты поочередно #4
Цитата Сообщение от Maxvell_2010 Посмотреть сообщение
void print () { cout<< "C="<<c<<endl; B:: print();} };
Так Вы же уже сделали это. Метод класса С вызывает метод класса B, который вызывает метод
класса A.
Maxvell_2010
1 / 1 / 0
Регистрация: 19.05.2013
Сообщений: 23
28.05.2014, 23:37  [ТС]     Виртуальная функция, принимающая объекты поочередно #5
это понятно, но мне нужно что бы метод был который принимает именно объекты этих классов

Добавлено через 24 минуты
у меня массив объектов выводился по циклу, препод сказала вместо цикла метод написать котоый будет принимать 1 параметр(оъбект) который будет изменятся т.е. будут выводится все объекты

Добавлено через 1 час 19 минут
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
void show(A &f)  // типа такая функция
 {
     f.print();
     
 };
switch (A *p)     // как в свич передать объект?
    {
              case A:
p->print();
case B:
p->print();
case C:
p->print();
    }
ValeryS
Модератор
6376 / 4842 / 443
Регистрация: 14.02.2011
Сообщений: 16,045
28.05.2014, 23:50     Виртуальная функция, принимающая объекты поочередно #6
Цитата Сообщение от Maxvell_2010 Посмотреть сообщение
у меня массив объектов выводился по циклу, препод сказала вместо цикла метод написать котоый будет принимать 1 параметр(оъбект)
чето я не понял
но вот это тебе надо или нет
C++
1
2
3
4
5
6
7
8
9
10
11
12
void output(A* a)
{
 a->print();
}
 
A a;
B b;
C c;
 
output(&a);
output(&b);
output(&c);
или так
C++
1
2
3
4
5
6
7
8
9
10
11
A* arrA[5];
 
arrA[0]=new A;
arrA[1]=new B;
arrA[2]=new C;
 
for(int i=0;i<3;i++)
  {
  output(arrA[i]);// будет делать тоже что и  следующая строчка
  arrA[i]->print();
  }
объекты ничего не знают про другие объекты
C++
1
int a,b;
a ничего не знает про b и наоборот

Добавлено через 1 минуту
Цитата Сообщение от Maxvell_2010 Посмотреть сообщение
switch (A *p) // как в свич передать объект?
никак switch работает только с целочисленными типами int char
Yandex
Объявления
28.05.2014, 23:50     Виртуальная функция, принимающая объекты поочередно
Ответ Создать тему
Опции темы

Текущее время: 12:00. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru