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

Вызов конструктора базового класса из порожденного - C++

Восстановить пароль Регистрация
 
HUSTLIN
1 / 1 / 1
Регистрация: 19.10.2013
Сообщений: 75
30.12.2013, 03:24     Вызов конструктора базового класса из порожденного #1
Есть Базовый класс студент:
имеет поля: фамилия, адрес, тел., возраст.

Порожденный класс группа:
имя группы, кол-во студентов в группе, массив студентов

И нужно вводить студентов в группу через конструктор базового класса, т.е. элемент массива объектов класса будет содержать имя группы, кол-во студентов в ней, и массив самих студентов.
Для массивов нужен конструктор по умолчанию.
Помогите разобраться, не понимаю как это реализовать:

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
70
71
72
73
74
75
76
77
int st_num = 2;
int gr_num = 2;
void Input(int inp);
 
class CStudent
{
protected:
    char surname[20], adress[20];
    int phone, age;
public:
    CStudent(){assign("\0", "\0", 0, 0);}
    CStudent(CStudent &st1);
    
    void setSurname(char* s){strcpy(surname, s);}   
    void setAddr(char* addr){strcpy(adress, addr);}
    void setPhone(int ph){phone = ph;}
    void setAge(int a){age = a;}
    
    char* getSurname(){return surname;} 
    char* getAddr(){return adress;}
    int getPhone(){return phone;}
    int getAge(){return age;}
 
    void Show(int i);   
    
    virtual void assign(char* s, char* addr, int ph, int a)
    {       
        strcpy(surname, s);     
        strcpy(adress, addr);
        phone = ph;
        age = a;
    }
};
 
class CGroupe : public CStudent
{
protected:
    char groupe[10];
    CStudent st[10];
    int size;
public:
    CGroupe(){}//???
    CGroupe(char* gr, int s, CStudent *mas) : CStudent(CStudent &mas) //???
    {
        gr = "\0";
        s = 0;
    }
    CGroupe(CGroupe &cg1);
 
    void setGroupe(char* name){strcpy(groupe, name);}
    void setSize(int sz){size = sz;}
 
    char* getGroupe(){return groupe;}
    int getSize(){return size;}
    void Print(int i);
    virtual void assign(char* nam, int sz/*, char* s, char* addr, int ph, int a*/)
    {
        strcpy(groupe, nam);
        size = sz;      
        /*strcpy(st[0].surname, s); 
        strcpy(st[0].adress, addr);
        st[0].phone = ph;
        st[0].age = a;*/
    }
};
 
CStudent::CStudent(CStudent &st1)
    {   
        strcpy(surname, st1.getSurname());  
        strcpy(adress, st1.getAddr());
        phone = st1.getPhone();
        age = st1.getAge();
    }
 
 
CStudent stud[10];
CGroupe gr[10];
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
30.12.2013, 03:24     Вызов конструктора базового класса из порожденного
Посмотрите здесь:

Вызов конструктора базового класса C++
C++ Вызов метода производного класса через обращение к методу базового класса
Вызов метода базового класса из класса-потомка C++
C++ Знакомство с наследованием. Вызов конструктора базового класса
C++ Использование конструктора базового класса при динамическом выделении памяти
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
alsav22
5282 / 4801 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
30.12.2013, 03:52     Вызов конструктора базового класса из порожденного #2
C++
1
2
3
4
5
6
7
8
9
10
11
CGroupe()
    { 
        strcpy(groupe, "\0");
        size = 0;
    }
 
    CGroupe(char* gr, int s)
    {
        strcpy(groupe, gr);
        size = 0;
    }
Только наследование здесь ненужно. Есть студенты, есть группа, состоящая (включающая) из студентов.
HUSTLIN
1 / 1 / 1
Регистрация: 19.10.2013
Сообщений: 75
30.12.2013, 03:56  [ТС]     Вызов конструктора базового класса из порожденного #3
alsav22, Условие лабы не поменяю)
А как тогда со студентами привязанными к определенной группе быть?
alsav22
5282 / 4801 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
30.12.2013, 03:59     Вызов конструктора базового класса из порожденного #4
Во втором конструкторе:
C++
1
size = s;
Добавлено через 25 секунд
Цитата Сообщение от HUSTLIN Посмотреть сообщение
А как тогда со студентами привязанными к определенной группе быть?
Когда тогда? В каждой группе свой массив студентов. Куда они от своей группы денутся?
HUSTLIN
1 / 1 / 1
Регистрация: 19.10.2013
Сообщений: 75
30.12.2013, 04:01  [ТС]     Вызов конструктора базового класса из порожденного #5
Цитата Сообщение от alsav22 Посмотреть сообщение
size = s;
Спасибо, уже внимательность теряю, после 00:00...

Цитата Сообщение от alsav22 Посмотреть сообщение
Когда тогда?
Ну мне ведь необходимо чтобы в группе было некоторое число студентов, как их вводить? как обращаться? нужен ли вызов конструктора из базового класса?
alsav22
5282 / 4801 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
30.12.2013, 04:10     Вызов конструктора базового класса из порожденного #6
Цитата Сообщение от HUSTLIN Посмотреть сообщение
Спасибо, уже внимательность теряю, после 00:00...
Это моя ошибка.

Добавлено через 1 минуту
Цитата Сообщение от HUSTLIN Посмотреть сообщение
нужен ли вызов конструктора из базового класса?
Не нужен, конструтор по умолчанию, для массива студентов, и так вызовется при создании группы.

Добавлено через 3 минуты
Цитата Сообщение от HUSTLIN Посмотреть сообщение
Ну мне ведь необходимо чтобы в группе было некоторое число студентов, как их вводить?
Создали группу. Потом делаете (раз нет в классе) ввод данных для кождого студента группы (в цикле). После ввода данных вызываете assign() для каждого студента в массиве, передавая в этот метод введённые данные студента.
HUSTLIN
1 / 1 / 1
Регистрация: 19.10.2013
Сообщений: 75
30.12.2013, 04:23  [ТС]     Вызов конструктора базового класса из порожденного #7
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
for(i = 0; i < gr_num; i++)
            {
                printf("===================================\n\n");
                printf("Группа:       \t");
                cin >> nam;
                printf("Кол-во студ.: \t");
                cin >> col;     
                for(int j = 0; j < col; j++)
                {           
                    printf("-----------------------------------\n");
                    printf("Фамилия:    \t");
                    cin >> s;       
                    printf("Возраст:    \t");
                    cin >> a;
                    printf("Адрес:      \t");
                    cin >> addr;        
                    printf("Телефон:    \t");
                    cin >> ph;
                }
               gr[j].assign(nam,col);   
            }
Добавлено через 5 минут
Не пойму как к assign группы будет связан с assign'oм студента, я ведь обращаюсь от массива класса группа.

Добавлено через 6 минут
alsav22,
Цитата Сообщение от alsav22 Посмотреть сообщение
После ввода данных вызываете assign() для каждого студента в массиве, передавая в этот метод введённые данные студента.
Не пойму как assign группы будет связан с assign'oм студента, я ведь обращаюсь от массива класса группа.
alsav22
5282 / 4801 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
30.12.2013, 04:25     Вызов конструктора базового класса из порожденного #8
Цитата Сообщение от HUSTLIN Посмотреть сообщение
Не пойму как к assign группы будет связан с assign'oм студента, я ведь обращаюсь от массива класса группа.
А вы обращайтесь от каждого студента в массиве в группе.
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
for(int i = 0; i < gr_num; i++)
    {
        printf("===================================\n\n");
        printf("Группа:       \t");
        cin >> nam;
        printf("Кол-во студ.: \t");
        cin >> col;     
        for(int j = 0; j < col; j++)
        {           
            printf("-----------------------------------\n");
            printf("Фамилия:    \t");
            cin >> s;       
            printf("Возраст:    \t");
            cin >> a;
            printf("Адрес:      \t");
            cin >> addr;        
            printf("Телефон:    \t");
            cin >> ph;
            gr[i].st[j].assign(s, a, addr, ph);
        }
        gr[i].assign(nam,col);   
    }
HUSTLIN
1 / 1 / 1
Регистрация: 19.10.2013
Сообщений: 75
30.12.2013, 04:33  [ТС]     Вызов конструктора базового класса из порожденного #9
alsav22,
Ругается на доступ к защищенному члену класса:
error C2248: 'CGroupe::st' : cannot access protected member declared in class 'CGroupe'
alsav22
5282 / 4801 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
30.12.2013, 04:36     Вызов конструктора базового класса из порожденного #10
Цитата Сообщение от HUSTLIN Посмотреть сообщение
Ругается на доступ к защищенному члену класса:
error C2248: 'CGroupe::st' : cannot access protected member declared in class 'CGroupe'
Ну, это уж как сделали класс. Переносите st в паблик, или делайте метод доступа.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
30.12.2013, 04:39     Вызов конструктора базового класса из порожденного
Еще ссылки по теме:

Инициализация конструктора базового класса C++
Вызов конструктора базового класса из класса-наследника C++
C++ Структура программы или наследование, без использования конструктора базового класса

Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
HUSTLIN
1 / 1 / 1
Регистрация: 19.10.2013
Сообщений: 75
30.12.2013, 04:39  [ТС]     Вызов конструктора базового класса из порожденного #11
alsav22, Спасибо большое за помощь, вы меня очень выручили))
Yandex
Объявления
30.12.2013, 04:39     Вызов конструктора базового класса из порожденного
Ответ Создать тему
Опции темы

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