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

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

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

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

26.12.2012, 03:16. Просмотров 338. Ответов 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) то работает.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
26.12.2012, 03:16
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Не работает конструктор при наследовании (C++):

Как работает деструктор и конструктор при наследовании? - C++
Возникла проблемка, не пойму, как работает деструктор и конструктор в моей программе. Я не вызываю явно конструктор, как в этом случае...

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

Конструктор при наследовании (классы) - C++
Не могу понять, в чем ошибка, точнее она в конструкторе производного класса... #include &lt;iostream&gt; using namespace std; class...

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

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

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

4
Kuzia domovenok
1892 / 1747 / 119
Регистрация: 25.03.2012
Сообщений: 5,935
Записей в блоге: 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)
{
}
не забыл. Тогда в чём проблема? Хотя я сам сомневаюсь, что проблема в этом.
1
Tiva
94 / 94 / 1
Регистрация: 25.04.2012
Сообщений: 429
26.12.2012, 03:32  [ТС] #3
Kuzia domovenok, дада, я уже исправил, проблема была именно в этом даже сам не понял, как это так криво написано было
0
Kuzia domovenok
1892 / 1747 / 119
Регистрация: 25.03.2012
Сообщений: 5,935
Записей в блоге: 1
26.12.2012, 03:37 #4
Вроде работает. В чём конкретно проблема?
0
Tiva
94 / 94 / 1
Регистрация: 25.04.2012
Сообщений: 429
26.12.2012, 03:38  [ТС] #5
Kuzia domovenok, я же написал, исправил - и все заработало как должно
0
26.12.2012, 03:38
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
26.12.2012, 03:38
Привет! Вот еще темы с ответами:

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

this(Всегда ли вызывается конструктор при не явной передачи объекта в конструктор) - C++
class Test { int i; public: void test(int i) { this -&gt; i = i; } }; Конструктор Test::Test всегда вызывается...

Использование шаблонов при наследовании, ошибка при компиляции - C++
При изучении списков написал шаблон протестировал, все работает. После написал класс наследник от шаблона List.h, компилятор выдает...

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


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

Или воспользуйтесь поиском по форуму:
5
Ответ Создать тему
Опции темы

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