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

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

Войти
Регистрация
Восстановить пароль
 
Tiva
94 / 94 / 1
Регистрация: 25.04.2012
Сообщений: 429
#1

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

26.12.2012, 03:16. Просмотров 325. Ответов 4
Метки нет (Все метки)

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++
Не могу понять, в чем ошибка, точнее она в конструкторе производного класса... #include &lt;iostream&gt; using namespace std; class...

Конструктор при множественном наследовании - C++
#include &lt;string&gt; class Worker // an abstract base class { private: std::string fullname; long id; public: ...

Конструктор копирования, деструктор при наследовании - C++
Есть класс A и производный от него B. Написать конструктор копирования, деструкторы для обоих классов. class A { public: int *a; ...

Конструктор переноса при наследовании в шаблонном классе - C++
Здравствуйте. Возможно ли как-то реализовать то, что я пытаюсь сделать? template&lt;typename T&gt; class Interface { protected: T...

С++ наследование(при наследовании не работает дружественная функция) - C++
Здраствуйте, есть класс Врач, Пациент. Есть френд функция с этими классами. Все рабоатет. Создаю новый клас Терапевт, который наследуется...

После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Kuzia domovenok
1890 / 1745 / 118
Регистрация: 25.03.2012
Сообщений: 5,924
Записей в блоге: 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
1890 / 1745 / 118
Регистрация: 25.03.2012
Сообщений: 5,924
Записей в блоге: 1
26.12.2012, 03:37     Не работает конструктор при наследовании #4
Вроде работает. В чём конкретно проблема?
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
26.12.2012, 03:38     Не работает конструктор при наследовании
Еще ссылки по теме:

При множественном наследовании не работает getline(std::cin, ?) - C++
Изучаю множественное наследование, так вот, нужно ввести два слова, но программа просто пропускает getline (std::cin, ?) Когда так при...

Деструктор при наследовании - C++
Имеется 3 класса (базовый -&gt; производный -&gt; производный2) в классе базовый имеется переменная char* var; в производном тоже есть 1...

Присвоение при наследовании - C++
Всем доброго дня ! Подскажите пожалуйста как сделать так , что-бы при выполнении операции a = c; вызывались операторы = обеих ...

Ошибка при наследовании - C++
Подскажите пожалуйста почему наследование класса readwrite не работает? //Программа считывает данные из файла и строит графики ...

Ошибка при наследовании - C++
Имеется архитектура вида: класс &quot;человек&quot;, от него производные &quot;препод&quot; и &quot;член приемной комиссии&quot;. От их двоих производный класс &quot;Препод и...

Ошибка при наследовании - C++
Вот такой код: class Figure2 { protected: int Color; int CenterX; int CenterY; public:


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

Или воспользуйтесь поиском по форуму:
Tiva
94 / 94 / 1
Регистрация: 25.04.2012
Сообщений: 429
26.12.2012, 03:38  [ТС]     Не работает конструктор при наследовании #5
Kuzia domovenok, я же написал, исправил - и все заработало как должно
Yandex
Объявления
26.12.2012, 03:38     Не работает конструктор при наследовании
Ответ Создать тему
Опции темы

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