Страница 3 из 4

.

Добавлено: 22 сен 2010, 10:24
BBB
Вобще, складывается впечатление, что Евгений Александрович пытается что-то сделать, не имея представления что нужно получить в итоге. (Ну и не понимая смысл слова "конструктор").

Возьмем опсаиние класса. Нигде не указано, каков смысл полей name и value? Я могу еще предположить, что класс описывает банк, а поле bank_name - наименование этого банка.
Но что такое name и value???
Интуитивно складывается ощущение (судя по исходнику, где фигурируют слова 'onput person'), то, все-таки. требуется как-то сохранить имена клиентов банка и их некоторую "величину" (value). Но если взглянуть на описание класса, то получается, что у каждого банка предполагается ТОЛЬКО ОДИН КЛИЕНТ. Поэтому-то, как я предполаю, программа и "сходит с ума". Т.к. ее автор хочет сохранить в экземпляре класса НЕСКОЛЬКО клиентов, а сам ответ лам место ТОЛЬКО ДЛЯ ОДНОГО.
Собственно, я об этом и писал чуть выше, когда предлагал заменить name и value на массивы.

Re: конструкторы

Добавлено: 22 сен 2010, 22:13
Евгений Александрович
поле name - клиенты. поле value - номер их счета.
И код работает как мне нужно :)
Т.е. Вы хотите сказать, что моя реализация в сообщении 18 совсем неправильная?

Re: конструкторы

Добавлено: 23 сен 2010, 01:04
BulldozerBSG
Они хотят сказать вам, что нельзя использовать реквизит ради реквизита. Такое впечатление, что наличие класса здесь ради галочки...

.

Добавлено: 23 сен 2010, 09:43
BBB
Евгений Александрович писал(а):поле name - клиенты. поле value - номер их счета.
"Он и в теретий раз..."
Ага, "клиентЫ". Все-таки, множественное число. Т.е., у одного банка (экземпляр класса bank) предполагается наличие нескольких клиентов. Евгений Александрович, быть может, Вы, все-таки, объясните, как в ОДНО поле name [экземпляра класса bank], Вы собираетесь поместить информацию о НЕСКОЛЬКИХ клиентах?

А автор сообщения #18 (по крайней мере, в настоящий момент) - Romeo.

И, боюсь, что в число int номер банковского счета не запихнете. Даже у беззнакового int максимальное значение порядка 4 миллиардов, а номера банковских счетов - 20-значные.

Re: конструкторы

Добавлено: 23 сен 2010, 10:01
Romeo
BBB, ну что ж ты вопросы такие глупые задаёшь? У него ж всё работает! Евгению Александровичу сей факт куда важнее и больше греет душу, чем все наши философские размышления о том, как оно должно быть на самом деле.

Видишься чудную гексагональную конструкцию на вершине сего могучего дерева, сынок? Это наш новый дом, малыш. И не думай, что твой папка - дурак. Не смотри, что в доме входная дверь на крыше, а окна смотрят вниз. Забудь о том, что у телека кинескоп развёрнут внутрь и кровати прибиты к потолку. Это ведь дом и в нём можно жить. Мы будем в нём счастливы.

Извините за ироничную миниатюру, не удержался. Старался исключительно во благо, а не из желания поиздеваться.

.

Добавлено: 23 сен 2010, 16:13
BBB
Евгений Александрович писал(а):поле name - клиенты. поле value - номер их счета.
И код работает как мне нужно :)
Т.е. Вы хотите сказать, что моя реализация в сообщении 18 совсем неправильная?
Посмотрел реализацию в сообщении #19.
И вижу, что Вы создаете (даже если закрыть глаза на то, что это делеется через Альпы) n банков, у каждого из которых по одному клиенту.
Это и есть "как мне нужно"? :) Хорошенькая модель данных! :)

Ну и "классическая" ошибка при освобождении памяти, когда был выделен массив:
delete p; // так неверно!
delete [] p; // вот так верно!

Re: конструкторы

Добавлено: 23 сен 2010, 20:44
Евгений Александрович
delete [] p; // вот так верно!
спасибо.
Вы, наверное, правы в том, что я не совсем правильно делаю, создавая n банков.
предлагал заменить name и value на массивы.
Каким образом это делается относительно моего случая. Если можно, поподробнее.

Re: конструкторы

Добавлено: 24 сен 2010, 11:21
Romeo

Код: Выделить всё

#include <string>
#include <vector>

class CBank
{
   std::string m_strBankName;
   std::vector<std::string> m_vecClientNames;
public:
   ...
}

Re: конструкторы

Добавлено: 24 сен 2010, 17:58
BBB
Romeo писал(а):

Код: Выделить всё

class CBank
{
   std::string m_strBankName;
   std::vector<std::string> m_vecClientNames;
public:
   ...
}
Или, если не связываться с std::string и std::vector<std::string>:

Код: Выделить всё

typedef char [55] tClientName;

class tBank
{
   char [44] bank_name;
   tClientName * names;
   int * values;
public:
   ...
} ;
После запроса количества клиентов (получается, правда, что по ходу работы программы это колиечество остается неизменным, но если это "проверочная" задача, то, возможно, такой вариант устроит) выделять нужное количество памяти под имена и номера счетов, и заполнять их. А в деструкторе не забыть эту память освободить:

names = new [n] tClientName;
values = new [n] int;


деструктор:

Код: Выделить всё

tBank::~tBank (void)
{ delete [] names;
 delete [] values;
};

Re: конструкторы

Добавлено: 24 сен 2010, 21:28
Евгений Александрович
Думаю, я уловил идею. Вопрос : если я хочу сделать так, чтобы у одного человека был не 1 счет, а несколько .т.е после ввода имени спросить о кол-ве считов и ввести эти счета.

Код: Выделить всё

class bank
{   
private:
	char *bank_name;
	char **name;
	int *value;
public:
	bank(){}
	void add(int);
	void show(int);
};
void bank::add(int n)
{
    bank_name=new char[33];
    cout<<"input bank_name\n"<<endl;
	cin>>bank_name;

	char str[55];
	name=new char *[n];
	value=new int [n];
for(int i=0;i<n;i++)
{
	system("cls");
	cout<<i<<":iput name:\n"<<endl;
	cin>>str;
	name[i]=new char[strlen(str)+1];
	strcpy(name[i],str);
	cout<<"input value:"<<endl;
	cin>>value[i];
}
system("cls");
}
void bank::show(int n)
{
	cout<<bank_name<<endl;
	for(int i=0;i<n;i++)
	cout<<name[i]<<" "<<value[i]<<endl;
	delete []name;
	delete []bank_name;
	delete []value;
}
void main()
{
	int n;
	bank object;
	cout<<" size (n):"<<endl;
	cin>>n;
	bank obj;
	obj.add(n);
	obj.show(n);
	system("PAUSE");
}