Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > C/C++ программирование > Общие вопросы C/C++
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 22.10.2011, 22:22   #1
iKarma
Кипучий чайник
Пользователь
 
Регистрация: 17.10.2011
Сообщений: 55
По умолчанию Указатели в С++

Написал программу с использованием класса. Там вводятся данные о книгах: автор, название, год издания, количество экземпляров. Нужно вывести количество книг заданного года издания. У меня только вот вопрос - как переписать эту программу с использованием указателей? Вот код:
Код:
#include "stdafx.h"
#include <iostream>
#include <conio.h>

using namespace std;

class BOOK {
public:
	void Input(int n); //ввод данных
	void Print(int n); //вывод введенных данных
	void Output(int n, int Year); //вывод результата
private:
    char Author[50]; //автор
	char Title[100];  //название книги
	int Year; //год
	int Quantity; //количество экземпляров
};  

BOOK MyLibrary[999];

void BOOK::Input(int n) {
	int i;
	for (i=0; i<n; i++){
		cout << "Book #" << i+1 << "\n";
		cout << "Title: ";
		cin >> MyLibrary[i].Title;
		cout << "Author: ";
		cin >> MyLibrary[i].Author;
		cout << "Year: ";
		cin >> MyLibrary[i].Year;
		cout << "Quanitity: ";
		cin >> MyLibrary[i].Quantity;
	}
}

void BOOK::Print(int n) {
	int i;
	for (i=0; i<n; i++) {
		cout << "Book #" << i+1 << "\n" << "Title: " << MyLibrary[i].Title << " Author: " << MyLibrary[i].Author << " Year: " << MyLibrary[i].Year << " Quanitity: " << MyLibrary[i].Quantity << "\n";
	}
}

void BOOK::Output(int n, int Year) {
	int i, k = 0;
	for (i=0; i<n; i++) 
		if (MyLibrary[i].Year == Year) {
			k++;
			cout << "Book #" << i+1 << "\n" << "Title: " << MyLibrary[i].Title << " Author: " << MyLibrary[i].Author << " Year: " << MyLibrary[i].Year << " Quanitity: " << MyLibrary[i].Quantity << "\n";
		}
	cout << "--------------------------------------------------------------------------------\n";
	cout << "Number of the books of " << Year << " = " << k << "\n";
}

int main() {
	int i, n, year;
	BOOK MyLibrary;
	cout << "Enter the number of the books: ";
	cin >> n;
	cout << "--------------------------------------------------------------------------------\n";
	if ((n<1)  && (n>999)) {
		cout << "Wrong dimension! It nust be between 1-999!/n";
		getch();
		return 0;
	};
    MyLibrary.Input(n);
	cout << "--------------------------------------------------------------------------------\n";
	cout << "Your library is consisted of next books:\n";
    MyLibrary.Print(n);
	cout << "--------------------------------------------------------------------------------\n";
	cout << "Enter the year of the search: ";
	cin >> year;
	cout << "--------------------------------------------------------------------------------\n";
	cout << "Your search results: \n";
	MyLibrary.Output(n,year);
	cout << "--------------------------------------------------------------------------------\n";
	cout << "For exit press any key...";
	getch();
	return 0;
}
iKarma вне форума Ответить с цитированием
Старый 23.10.2011, 04:33   #2
An1ka
C++,DirectX/OpenGL
Форумчанин
 
Регистрация: 09.01.2011
Сообщений: 422
По умолчанию

Указатели очень удобны в циклах переборах:
Код:
 void BOOK::Input(int n) {
	BOOK *p = MyLibrary;
	for ( ; p < MyLibrary + n; ++p){
		cout << "Book #" << p - MyLibrary + 1 << endl;
		cout << "Title: ";
		cin >> p->Title;
		cout << "Author: ";
		cin >> p->Author;
		cout << "Year: ";
		cin >> p->Year;
		cout << "Quanitity: ";
		cin >> p->Quantity;
	}
}
An1ka вне форума Ответить с цитированием
Старый 23.10.2011, 17:48   #3
Сыроежка
Форумчанин
 
Регистрация: 01.07.2011
Сообщений: 423
По умолчанию

Вам надо в вашем классе помянять объявления символьных массивов char Author[50] и char Title[100] на указатели char *Author; char *Title, и при создании объекта выделять память с помощью оператора new

Например,

Код:
class BOOK {
public:
   BOOK() : Author( new char[50[ ), Title( new char[100]) {}
А в деструкторе их удалять Например,
Код:
   ~BOOK() { delete [] Author; delete [] Title; }
При этом вам придется писать конструктор копирования и оператор присваивания.
Со мной можно встретиться на www.clipper.borda.ru
Сыроежка вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
C++ УКАЗАТЕЛИ Scarletred Общие вопросы C/C++ 1 24.05.2010 01:56
Указатели @Manya@ Общие вопросы C/C++ 4 17.05.2010 13:53
Указатели GrihaI Общие вопросы C/C++ 11 06.05.2010 18:53
Указатели sid Помощь студентам 2 02.01.2010 23:23
[C] массивы, указатели, двойные указатели. Iggel Общие вопросы C/C++ 5 05.05.2009 12:39