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

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 90, средняя оценка - 4.82
Robbi
0 / 0 / 0
Регистрация: 15.03.2009
Сообщений: 11
#1

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

02.11.2009, 14:10. Просмотров 13159. Ответов 8
Метки нет (Все метки)

Сдаю лабораторную на тему наследования в С++ :
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++
Здрасти. Такая проблема. У меня есть классы с таким наследованием: KIERUNEK--&gt;PRZEDMIOT--&gt;OCENA&lt;--STUDENT Вот конструкторы класса...

Наследование конструкторов - C++
Здравствуйте, мне нужно что бы player наследовал конструктор от aobject class aobject { public: aobject(int xx,int yy,int** mm)...

Наследование конструкторов - C++
Добрый день. Подскажите как правильно осуществить наследование конструктора в двух файлах h и cpp. В одном h файле все работало. ...

Наследование конструкторов - C++
Здравствуйте! У меня такой вопрос: Как сделать так, чтобы при создании объекта дочернего класса не вызывался конструктор родительского? При...

Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Андрейка
419 / 223 / 27
Регистрация: 25.03.2009
Сообщений: 744
02.11.2009, 14:19 #2
нет конструторы не наследуются ты их вызываешь в конструкторе производного класса в списке инициализации.
Robbi
0 / 0 / 0
Регистрация: 15.03.2009
Сообщений: 11
02.11.2009, 14:23  [ТС] #3
Ничего, ошибок нет, все вроде выполняется корректно...
Андрейка, отвечал уже так, ответ не устраивет.
Нвужно ответить, именно ПОЧЕМУ не наследуется..
oxotnik
1589 / 1066 / 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
Модератор
Эксперт CЭксперт С++
13132 / 7395 / 828
Регистрация: 27.09.2012
Сообщений: 18,217
Записей в блоге: 3
Завершенные тесты: 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
1482 / 1058 / 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);
...
в конструкторах запрашивать плохо, потому что таким образом хардкодится способ консруирования класса
и по другому инстанс создать нельзя. а ведь данные откуда угодно могут быть получены. могут быть запрошены, могут быть прочитаны из файла, могут быть вычислены и т.п.
Extazzy777
0 / 0 / 0
Регистрация: 20.05.2014
Сообщений: 5
20.05.2014, 21:50 #9
ну, а если при наследовании классов отсутствует конструктор в базовом классе, то что тогда?
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
20.05.2014, 21:50
Привет! Вот еще темы с ответами:

Наследование конструкторов - C++
Создать класс CPoint – точка. На его основе создать классы CColoredPoint и CLine. На основе класса СLine создать класс CcoloredLine и класс...

Наследование конструкторов классов - C++
может ли конструктор класса-наследника иметь меньше переменных,чем конструктор класса-отца?

Явное наследование конструкторов - C++
Если препод требует наследовать констуркторы явно что он имеет ввиду делать это только для дефолтных конструкторов или для не дефолтных...

Наследование конструкторов с параметрами и деструктора - C++
Данно два класс. Родитель: class entity { private: int ID = 0; class object_list * list_; protected: std::string...


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

Или воспользуйтесь поиском по форуму:
Yandex
Объявления
20.05.2014, 21:50
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru