#include<iostream>
#include<string>
using namespace std;
class my_int_array
private:
int num;
int *ptr;
public:
my_int_array(int n){
num = n;
int *ptr = new int[n];
for (int i = 0; i < n; i++){
ptr[i] = 0;
}
}
my_int_array(int x[], int size){
int *ptr = new int[size];
for (int i = 0; i < size; i++){
ptr[i] = x[i];
}
}
my_int_array(my_int_array&other){
int *ptr = new int[other.num];
for (int i = 0; i < other.num; i++){
ptr[i] = other.ptr[i];
}
num = other.num;
}
int size(){
return num;
}
int at(int n){
if (n > num - 1 || n < 0){
cout << "out of range" << endl;
}
else{
return ptr[n];
}
}
my_int_array &operator=(const my_int_array&temp){
int *ptr = new int[temp.num];
for (int i = 0; i < temp.num; i++){
ptr[i] = temp.ptr[i];
}
num = temp.num;
}
~my_int_array(){
delete[] ptr;
}
};
int main(){
my_int_array arrry1(5);
cout << arrry1.size() << endl;
}
Когда я запускаю эту программу, она может отображать 5, но тогда произойдет сбой .exe и может кто-то помочь мне найти мои ошибки в этот кодНекоторые проблемы с моим простым кодом массива, это действует как очень простой вектор.
что у него есть: 1. создать пустой массив; 2. size() возвращает размер массива и() возвращает значение определенного индекса. 3. копировать конструктор и оператор присваивания, которые делают копии 4. при передаче массива и размера массива этот класс должен скопировать этот массив в его элементы.
Если кто-то может помочь, это было бы здорово, так как я новый ученик, любое предложение будет приветствоваться, спасибо!
Вы обновляете «int * ptr» во всех конструкторах и не используете «int * ptr;» поле, объявленное в частном разделе. В деструкторе вы удаляете неинициализированный указатель, который вызывает сбой. Удалите «int *» из объявления указателя в методах. –
Ваш 'operator =' не возвращает значение. Неопределенное поведение. Кроме того, как только вы сделаете изменение, чтобы удалить «int *» из всех ваших методов, ваш код не является безопасным для всех. – PaulMcKenzie
@BrianWalker, я думаю, вы должны продвигать свой комментарий к ответу. –