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

Наследование конструкторов? - C++

Восстановить пароль Регистрация
 
Рейтинг: Рейтинг темы: голосов - 90, средняя оценка - 4.82
Robbi
0 / 0 / 0
Регистрация: 15.03.2009
Сообщений: 11
02.11.2009, 14:10     Наследование конструкторов? #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
#include <iostream>
using namespace std;
 
class hero {
protected:
    int jiv;
    int pow;
public:
    hero(int j, int p)
    {
        jiv = j;
        pow = p;
    }
    virtual void show()
    {
        printf("jiv: %d\npower: %d\n",jiv,pow);
    }
};
 
// В классе Y, i и j класса X становятся защищёнными членами
class mif: public hero {
    int vel;
    int magic;
public:
    mif(int j, int p, int v, int m):hero(j,p)
    {
        vel = v;
        magic = m;
    }
    void show()
    {
        printf("jiv: %d\npower: %d\nvelocity: %d\nmagic: %d\n",jiv,pow,vel,magic);
    }
};
class chel: public hero {
    int ver;
    int ud;
public:
    chel(int j, int p, int v, int u):hero(j,p)
    {
        ver = v;
        ud = u;
    }
    void show()
    {
        printf("jiv: %d\npower: %d\nvernost': %d\nuda4a: %d\n",jiv,pow,ver,ud);
    }
};
void show_who(hero &r) {
    r.show();
}
 
int main()
{
    int i,j,k,l;
    printf ("vvedite jiv,pow,vel, magic: ");
    scanf("%d %d %d %d",&i,&j,&k,&l);
    mif m(i,j,k,l);
    m.show();
    chel c(100,100,100,2);
    c.show();
 
    show_who(m);
    show_who(c);
 
 
    return 0;
}
Вопрос препода: ПОЧЕМУ НЕ наследуются конструкторы? Или это возможно??
Сижу щас, мучаюсь, нигде не могу найти ответ :-((
Подскажите плз, пожалуйста! Заранее спасибо)
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
02.11.2009, 14:10     Наследование конструкторов?
Посмотрите здесь:

C++ Наследование конструкторов
C++ Наследование конструкторов
Наследование конструкторов C++
Явное наследование конструкторов C++
Наследование конструкторов C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Андрейка
407 / 211 / 22
Регистрация: 25.03.2009
Сообщений: 710
02.11.2009, 14:19     Наследование конструкторов? #2
нет конструторы не наследуются ты их вызываешь в конструкторе производного класса в списке инициализации.
Robbi
0 / 0 / 0
Регистрация: 15.03.2009
Сообщений: 11
02.11.2009, 14:23  [ТС]     Наследование конструкторов? #3
Ничего, ошибок нет, все вроде выполняется корректно...
Андрейка, отвечал уже так, ответ не устраивет.
Нвужно ответить, именно ПОЧЕМУ не наследуется..
oxotnik
 Аватар для oxotnik
1584 / 1061 / 33
Регистрация: 21.08.2008
Сообщений: 4,545
Записей в блоге: 1
02.11.2009, 14:44     Наследование конструкторов? #4
Если в классе нет определенных пользователем конструкторов, то компилятор сам генерирует конструктор по умолчанию, который вызывает дефолтные конструкторы базовых классов. Если определен хотя бы один пользовательский конструктор, то конструктор по умолчанию не генерируется.
fktrctq0321
0 / 0 / 0
Регистрация: 10.05.2013
Сообщений: 37
13.12.2013, 01:20     Наследование конструкторов? #5
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
#include "stdafx.h"
#include "iostream"
#include "math.h"
#include <conio.h>
using namespace std;
 
                        // variant 50
class money              // 2.4
{
    unsigned long hrn;
    unsigned int kop;
public:
    void set_cash(unsigned long _hrn, unsigned int _kop)
    {
        this->hrn=_hrn;
        this->kop=_kop%100;
        this->hrn=_hrn+_kop/100;
    }
 
    money::money()
    {
        unsigned long temp_hrn;
        unsigned int temp_kop;
 
        cout << "Введите сумму гривен и копеек:\n";
        cin >> temp_hrn;
        cin >> temp_kop;
        this->set_cash(temp_hrn,temp_kop);
    }
 
    virtual void output() const
    {
        cout << "\nВаш баланс: " << this->hrn << " грн " << this->kop << " коп" << endl;
    }
 
};
 
class figure: public money      //2.3
{
    int a;
public:
    void set_a(int _a)
    {
        this->a=_a;
    }
    
    figure::figure()
    {
        int temp_a;
        cout << "\nВведите число:" << endl;
        cin>>temp_a;
        this->set_a(temp_a);
 
    }
 
    virtual void output() const
    {
        cout << "\nВведеное число: " << this->a << endl;
    }
};
 
int main()
{
    setlocale(LC_ALL, "Rus");
    
    money cash;
    figure number;
 
    money *c1 = &cash;
    c1->output();
    c1=&number;
    c1->output();
}
Ребят, помогите, пожалуйста. Разбираюсь сейчас с виртуальными методами. Вроде разобрался. НО! Как сделать так, что в производный класс (дочерний) не наследовался конструктор? т.е. у меня 2 раза запрашивается ввод баланса в данном случае (1-ый раз - в базовом классе, 2-ой раз - уже в производном)
Croessmah
Модератор
Эксперт С++
 Аватар для Croessmah
11811 / 6790 / 767
Регистрация: 27.09.2012
Сообщений: 16,840
Записей в блоге: 2
Завершенные тесты: 1
13.12.2013, 01:22     Наследование конструкторов? #6
Цитата Сообщение от fktrctq0321 Посмотреть сообщение
т.е. у меня 2 раза запрашивается ввод баланса в данном случае (1-ый раз - в базовом классе, 2-ой раз - уже в производном)
подумайте над тотальным изменением структуры программы!
fktrctq0321
0 / 0 / 0
Регистрация: 10.05.2013
Сообщений: 37
13.12.2013, 01:24     Наследование конструкторов? #7
Цитата Сообщение от Croessmah Посмотреть сообщение
подумайте над тотальным изменением структуры программы!
а исправить "корявость" здесь никак нельзя?
упор в задании делается на виртуальные методы, это уже для корректности и для глаза
DU
1477 / 1053 / 45
Регистрация: 05.12.2011
Сообщений: 2,279
13.12.2013, 01:32     Наследование конструкторов? #8
по мне - так запрашивать данные в конструкторах - это моветон какой-то.
лучше сделать конструкторы без или же конструкторы с интовыми параметрами или что вы там запрашиваете.
так вот делать запрос на ввод вне конструктора и когда данные ввели - создавать инстанс, передавая в конструктор введенные данные или же сетить данные через публичные методы.
псевдокод:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
int data = 0;
std::cout << "Enter data: ";
std::cin >> data;
 
MyClass myClass(data);
...
 
 
 
или
int data = 0;
std::cout << "Enter data: ";
std::cin >> data;
 
MyClass myClass;
myClass.setData(data);
...
в конструкторах запрашивать плохо, потому что таким образом хардкодится способ консруирования класса
и по другому инстанс создать нельзя. а ведь данные откуда угодно могут быть получены. могут быть запрошены, могут быть прочитаны из файла, могут быть вычислены и т.п.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
20.05.2014, 21:50     Наследование конструкторов?
Еще ссылки по теме:

Наследование конструкторов C++
C++ Наследование конструкторов
C++ Наследование конструкторов с параметрами и деструктора

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

Или воспользуйтесь поиском по форуму:
Extazzy777
0 / 0 / 0
Регистрация: 20.05.2014
Сообщений: 5
20.05.2014, 21:50     Наследование конструкторов? #9
ну, а если при наследовании классов отсутствует конструктор в базовом классе, то что тогда?
Yandex
Объявления
20.05.2014, 21:50     Наследование конструкторов?
Ответ Создать тему
Опции темы

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