Member 14520059 Ответов: 1

Это сработало, но на самом деле не сработало?


Эта задача основана на динамическом выделении объекта в конструкторе. Я использую компилятор dev c++, на котором я могу ввести только 3 члена, и он настолько ограничен, что меня не устраивает этот код.
-Я хотел выделить размер массива чисел с плавающей запятой, передавая аргументы внутри конструктора.
-Это сработало, но количество элементов ограничено 3 в моем компиляторе(т. е. dev c++)

Что я уже пробовал:

#include<iostream>
using namespace std;

class ArrayNumber
{
	private:
		int size;
		double *array;
	public:
		ArrayNumber(int n)
		{
			size = n;
	  		array = new double(size);
	  		
	  		cout<<"Enter elements:\n";
			for (int i = 0; i < size; i++) {
	   			cin>>array[i]; 
	  		};
		}
		
		~ArrayNumber()
		{
			cout<<"\nDestructed";
		}
		
		void store(int position, double number){
			array[position] = number; 
			cout<<"That value is stored."<<endl;
		}
		
		double retrive(int a){
			return array[a];
		}	
		
		double highest(){
			double max = array[0];
			for(int i=1; i<size; i++){
				if(array[i]>max){
					max = array[i];
				}
			}
			return max;
		}
		
		double lowest(){
			double min = array[0];
			for(int i=1; i<size; i++){
				if(array[i]<min){
					min = array[i];
				}
			}
			return min;
		}
		
		double average(){
			double sum = 0;
			for(int i=0; i<size; i++){
				sum += array[i];
			}
			return sum/size;
		}
};

int main()
{
	int n;
	cout<<"Enter the size of array: ";
	cin>>n;

	ArrayNumber a(n);
	
	int position; double number;
	cout<<"Enter positions and number you want to store:\n";
	cin>>position>>number;
	a.store(position, number);
	
	int pos;
	cout<<"Enter a location of number you want: ";
	cin>>pos;
	cout<<"Retrived number = "<<a.retrive(pos)<<endl;
	
	cout<<"\nHighest number = "<<a.highest();
	cout<<"\nLowest number = "<<a.lowest();
	cout<<"\nAverage number = "<<a.average()<<endl;
	
}

CPallini

Что такое ограниченность? Почему? Не могли бы вы рассказать подробнее?
Обратите внимание, что вы должны освободить память в своем деструкторе класса (или, лучше, использовать std::vector вместо того, чтобы выделять себе память)

jeron1

Попробуйте изменить
array = new double(size); // это выделяет 1 двойной инициализированный размер
к
array = new double[size]; // это выделяет двойники 'size'

Послушайте, что говорит CPallini, используя std::vector-это лучший вариант.

1 Ответов

Рейтинг:
1

Member 14520059

Я использовал (размер) вместо [размер], спасибо jeron1 за это