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

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

Восстановить пароль Регистрация
 
Tiva
94 / 94 / 1
Регистрация: 25.04.2012
Сообщений: 429
26.12.2012, 03:16     Не работает конструктор при наследовании #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
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
#include <iostream>
using namespace std;
#include <locale>
#include <time.h>
#include <windows.h>
 
class TArray
{
protected:
    int *a;
    int count;
public:
    TArray();
    TArray(int _count);
    TArray(int min, int max);
    TArray(const TArray&);
    ~TArray();
    void input();
    void output();
    void input_count();
    void sort(int k);
    friend ostream& operator << (ostream&, TArray&);
    friend istream& operator >> (istream&, TArray&);
    friend TArray operator + (TArray&, TArray&);
    TArray operator =(TArray&);
};
class Operate:public TArray{
public:
    Operate(int *a, int count);
    void invert();
    void choose(int k);
Operate():TArray(){}
Operate (int _min, int _max); //Конструктор с параметрами
Operate (const Operate &);//Конструктор копирования
 
};
Operate::Operate (int _min, int _max)
{
    TArray::TArray(_min, _max);
 
}
Operate::Operate (const Operate & str):TArray(str)
{
}
//Operate::Operate(int *a, int count): TArray(min,max){}
 
void Operate::choose(int k)
{
    cout<<endl;
    for(int i=0; i<count; i++)
        if(a[i]%k==0) cout<<a[i]<<" ";
}
void Operate::invert()
{
    cout<<endl;
    //int *temp=new int [count];
    for(int i=count-1; i>=0; i--)
        cout<<a[i]<<" ";
    cout<<endl;
}
TArray::TArray(int _count)
{
    a=new int[_count];
    for (int i=0; i<_count; i++) a[i]=0;
}
TArray::TArray(const TArray& obj)
{
    if(!obj.a) a=0;
        else
            {
                a=new int [sizeof(obj.a)+1];
                //strcpy(type,obj.type);
                a=obj.a;
            }
    count=obj.count;
}
void TArray::input_count()
{
    cout<<"\nВведите кол-во элементов\n";
    cin>>count;
}
TArray::TArray()
{
    input_count();
    a=new int[count];
    for (int i=0; i<count; i++) a[i]=0;
}
TArray::TArray(int min, int max)
{
    //добавить про рандом что-то там
    srand(time(NULL));
    input_count();
 
    a=new int[count];
    for (int i=0; i<count; i++) a[i]=rand()%(max-min+1)+min;
}
TArray::~TArray()
{
    delete[] a;
}
void TArray::output()
{
    for (int i=0; i<count; i++)
        cout<<a[i]<<" ";
    cout<<endl;
}
void TArray::input()
{
    cout<<"Введите "<<count<<" элементов массива"<<endl;
    for (int i=0; i<count; i++)
        cin>>a[i];
}
void TArray::sort(int k)
{
    int buf,j=0;
    if (k==0)
    {
        do
        {
            for (int i=0; i<count; i++)
            {
                if(a[i]<a[i+1])
                {
                    buf=a[i];
                    a[i]=a[i+1];
                    a[i+1]=buf;
                }
            }
            j++;
        }
        while(j<count*count);
    }
    if (k==1)
    {
        do
        {
            for (int i=0; i<count-1; i++)
            {
                if(a[i]>a[i+1])
                {
                    buf=a[i];
                    a[i]=a[i+1];
                    a[i+1]=buf;
                }
            }
            j++;
        }
        while(j<count*count);
    }
}
//===============================================ПЕРЕГРУЗКА ОПЕРАТОРОВ
TArray operator + (TArray& Q, TArray& P)
{
    for (int i=0; i<Q.count; i++)
    {
        Q.a[i]+=P.a[i];
    }
    return Q;
}
ostream& operator << (ostream& stream, TArray& obj)
{
    cout<<endl;
    for (int i=0; i<obj.count; i++)
        stream<<obj.a[i]<<" ";
    return stream;
}
istream& operator >> (istream& stream, TArray& obj)
{
    cout <<"\nВведите элементы массива\n";
    for (int i=0; i<obj.count; i++)
        stream >> obj.a[i];
    return stream; // возвращаем поток
}
TArray TArray::operator =(TArray& P)
{
    for (int i=0; i<P.count; i++)
        a[i]=P.a[i];
    return *this;
}
 
int main(void)
{
    SetConsoleCP(1251);
    SetConsoleOutputCP(1251);
    Operate a(0,10);
    cout<<a;
    a.invert();
    a.choose(2);
    system("pause");
 
}
почему элементы не заполняются рандомом от 0 до 10?
если объявлять базовым классом(TArray) то работает.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
26.12.2012, 03:16     Не работает конструктор при наследовании
Посмотрите здесь:

C++ Конструктор при множественном наследовании
C++ Ошибка при наследовании
C++ Конструктор при наследовании (классы)
Конструктор копирования, деструктор при наследовании C++
C++ С++ наследование(при наследовании не работает дружественная функция)
С++ течет при наследовании C++
C++ Ошибка при наследовании?
C++ Присвоение при наследовании
Ошибка при наследовании C++
Конструктор переноса при наследовании в шаблонном классе C++
Как работает деструктор и конструктор при наследовании? C++
Ошибка при наследовании C++

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

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Kuzia domovenok
 Аватар для Kuzia domovenok
1886 / 1741 / 117
Регистрация: 25.03.2012
Сообщений: 5,910
Записей в блоге: 1
26.12.2012, 03:30     Не работает конструктор при наследовании #2
ой-ой

Добавлено через 10 минут
C++
1
2
3
4
5
Operate::Operate (int _min, int _max)
{
    TArray::TArray(_min, _max);
 
}
Про списки инициализации ты забыл? Судя по этим строчкам
C++
1
2
3
Operate::Operate (const Operate & str):TArray(str)
{
}
не забыл. Тогда в чём проблема? Хотя я сам сомневаюсь, что проблема в этом.
Tiva
94 / 94 / 1
Регистрация: 25.04.2012
Сообщений: 429
26.12.2012, 03:32  [ТС]     Не работает конструктор при наследовании #3
Kuzia domovenok, дада, я уже исправил, проблема была именно в этом даже сам не понял, как это так криво написано было
Kuzia domovenok
 Аватар для Kuzia domovenok
1886 / 1741 / 117
Регистрация: 25.03.2012
Сообщений: 5,910
Записей в блоге: 1
26.12.2012, 03:37     Не работает конструктор при наследовании #4
Вроде работает. В чём конкретно проблема?
Tiva
94 / 94 / 1
Регистрация: 25.04.2012
Сообщений: 429
26.12.2012, 03:38  [ТС]     Не работает конструктор при наследовании #5
Kuzia domovenok, я же написал, исправил - и все заработало как должно
Yandex
Объявления
26.12.2012, 03:38     Не работает конструктор при наследовании
Ответ Создать тему
Опции темы

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