@idbogdanbabitskiy

Как удалить элемент из класса в С++?

#include <iostream>
#include <string>
#include <cstdlib>

using namespace std;

	class tv
	{
	private:
		char mark[20];
		char model[20];
		char diagonal[20];
		char price[20];
	public:
		void input()
		{
			cout << "\nEnter of the mark: ";
			cin.get();
			cin.getline(mark, 20);
			cout << "Enter of the model: "; 
			cin.getline(model, 20);
			cout << "Enter of the diagonal: "; 
			cin.getline(diagonal, 20);
			cout << "Enter of the price: "; 
			cin.getline(price, 20);
		}
		void output()
		{ 	
			cout << "Mark: "<< mark<< endl;
			cout <<"Model: " << model<< endl;
			cout  <<"Diagonal: " << diagonal << endl;
			cout <<"Price: " << price<< endl << endl;
		}
		void clearscr()
		{
			system ("cls");
		}
	};
int main(int argc, char** argv) 
{ 	
	int k, n, count;
	cout << "How many enter of the date?\n";
	cin >> n;
	tv *s = new tv[n];

	char m;
	do
	{
		cout << " 1 - Enter of the date\n" << " 2 - output\n "<< "3 - clear "<<"\n4 - delete"<< endl;
		cin >> k;
		
	switch (k)
	{
		case 1: for (int i = 0; i < n; ++i)
					s[i].input();
		break;
		case 2: for (int i = 0; i < n; ++i)
					s[i].output();
					break;
		case 3: s[0].clearscr();break;	
		case 4: 	cout << "\nEnter index of array which will be delete: " ;
				cin >> count;
			for (int i = count; i < n-1; ++i)
			{
				s[i]= s[i+1];
				
			}
		default: cout << "You have entered not the correct number" << endl;
	}
	cout << "Do you want go out?(y/n)"<< endl;
	cin >> m;
    }
	while(m == 'y');
	
	return 0;
}
  • Вопрос задан
  • 440 просмотров
Решения вопроса 1
arusef
@arusef
Novice .NET dev
Не существует перегрузки оператора "<<" для ostream такой, чтобы она принимала class tv в качестве параметра. Попробуй определить метод toString() в классе tv, который будет выводить на экран то, что тебе нужно.
К тому же, в классе tv у тебя не перегружен оператор "=", поэтому присваивание идёт поверхностное. Не помню, как там со статическими массивами, но, скорее всего, они просто начинают ссылаться на другую область памяти (то есть на строки в соседнем элементе). Следовательно, если у тебя не были инициализированы чем-то элементы старше count, то всё заполнится мусором.
Ещё один момент заключается в том, что массив на самом деле не сжимается, это ты двигаешь элементы справа налево, оставляя в конце один неиспользуемый. Обычно в таких случаях выделяют память под новый массив меньшего размера, а потом переносят всё в него, например.
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
@idbogdanbabitskiy Автор вопроса
В case 4 я сделал, но когда вывожу на экран, вылезает ошибка. Как вывести его? И вообще я правильно сделал?2f2d1894f66a4997a39add5f50f7e0c4.JPG
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы