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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 04.04.2009, 22:39   #1
z3rg
Пользователь
 
Регистрация: 17.02.2009
Сообщений: 25
По умолчанию Динамический сивольный массив типа char

подскажите как динамический сивольный массив типа char, с выделением памяти(на классах)
и почему к примеру char mas[100][i]; - нельзя, мне так училка сказала.
z3rg вне форума Ответить с цитированием
Старый 04.04.2009, 22:47   #2
Sazary
В тени
Старожил
 
Аватар для Sazary
 
Регистрация: 19.12.2008
Сообщений: 5,788
По умолчанию

Цитата:
и почему к примеру char mas[100][i]; - нельзя
Мало информации. Что такое i? Переменная? Константа?

Цитата:
подскажите как динамический сивольный массив типа char
Видимо, это имеется в виду:
Код:
char mas = new char[100];  // создается массив из 100 символов
//..................
delete[] mas;  // удаляем массив
Вполне очевидно, чтобы что-то понять, необходимо книги читать.
Не нужно плодить бессмысленных тем. Вас Поиск избавит от многих проблем.

___________________________________ ___________________________________ _______
[=Правила форума=]_____[Поиск]_____[Литература по С++]____[Литература. Паскаль]
Sazary вне форума Ответить с цитированием
Старый 04.04.2009, 23:24   #3
pu4koff
Старожил
 
Аватар для pu4koff
 
Регистрация: 22.05.2007
Сообщений: 9,065
По умолчанию

Если нужно загнать много строк в одну переменную:
Код:
char **a = new char*[10]; // 10 строк
for (int i = 0; i < 10; i++)
{
  a[i] = new char[100]; // Под каждую строку выделяем массив в 100 символов
}
...
// Удаление массива
for (int i = 0; i < 10; i++)
{
  delete[] a[i];
}
delete[] a;
pu4koff вне форума Ответить с цитированием
Старый 05.04.2009, 12:40   #4
z3rg
Пользователь
 
Регистрация: 17.02.2009
Сообщений: 25
По умолчанию

pu4koff, ага вот это и нужно, а что нельзя удаленить массив просто deleta(a);,зачем этот цикл.
z3rg вне форума Ответить с цитированием
Старый 05.04.2009, 12:46   #5
pu4koff
Старожил
 
Аватар для pu4koff
 
Регистрация: 22.05.2007
Сообщений: 9,065
По умолчанию

Цитата:
Сообщение от z3rg Посмотреть сообщение
pu4koff, ага вот это и нужно, а что нельзя удаленить массив просто deleta(a);,зачем этот цикл.
неа. нельзя. Если написать просто delete[] a, то удалится только массив указателей на строки, а сами строки не удалятся
pu4koff вне форума Ответить с цитированием
Старый 05.04.2009, 12:54   #6
z3rg
Пользователь
 
Регистрация: 17.02.2009
Сообщений: 25
По умолчанию

pu4koff, ага вот это и нужно, а что нельзя удаленить массив просто deleta(a);,зачем этот цикл.

я точно также делал тока вводил массив a[100][i], а нада a[i]- и немог допереть почему вводится тока 2 строки, счас дошло, всем спасибо большое что помогли.

pu4koff, спасибо.
z3rg вне форума Ответить с цитированием
Старый 05.04.2009, 14:54   #7
z3rg
Пользователь
 
Регистрация: 17.02.2009
Сообщений: 25
По умолчанию

помогитен пожалуста разобратся в чем ошибка, показывает на скобку.

программа, вводит массив книг, затем добавляет автора, и выводит общую информацию.

Код:
# include <iostream.h>
# include <iomanip.h>

class knigi
{
int n;
char **mas;
public:
	knigi(){

mas = new char*[10]; 
for (int i = 0; i < 10; i++)
{
  mas[i] = new char[100]; 
}
}

	~knigi(){
	for (int i = 0; i < 10; i++){
  delete[] mas[i];}
delete[] mas;
	}
	void vvod();
	void vivod(int);
};

void knigi::vvod(){
cout<<"vvedite knigi"<<endl;
for(int i=0; i<10;i++){
cin>>mas[i];
}
}

void knigi::vivod(int x){
	cout<<"kniga:"<<mas[x];
}

class avtor:public knigi
{
char **av;
public:
	avtor(){
	av = new char*[10];
for(int i=0; i<10;i++){
	av[i] = new char[100];
}
	}
	~avtor(){
	for(int i=0;i<10;i++)
	{
  delete[] av[i];
}
delete[] av;
	}
	void vvodav();
	void vivot(int);
};

void avtor::vvodav()
{
	for(int i=0;i<10;i++){
	vivod(i);
	}

	int d;
cout<<"dobavit avtora dla knigi nomber:";
cin>>d;
		cin>>av[d];
	}

void avtor::vivot(int c){
	cout<<"avtor:"<<av[c]<<endl;
}


class otdel:public knigi, public avtor
{
public:
	otdel(){}
	~otdel(){}

	void vivotallknig();
};

void otdel::vivotallknig(){
	for(int i=0; i<10; i++){
	vivod(i);
    vivot(i);
	}
}

void main(){
knigi bb;
bb.vvod();
avtor bb;
bb.vvodav();
otdel bb;
bb.vivotallknig();
}
z3rg вне форума Ответить с цитированием
Старый 05.04.2009, 15:54   #8
pu4koff
Старожил
 
Аватар для pu4koff
 
Регистрация: 22.05.2007
Сообщений: 9,065
По умолчанию

1. У вас описание класса и его реализация в одном файле? о_О
2. class otdel: public knigi, public avtor
avtor уже наследуется от knigi и нельзя так писать. Оставляйте или автора или книгу в родителях
3.
Код:
knigi bb;
bb.vvod();
avtor bb;
bb.vvodav();
otdel bb;
bb.vivotallknig();
Вы объявляете несколько переменных с одним именем
4. Что-то мне подсказывает о Вашем непонимании сути ООП. Наследование у Вас похоже больше на то, как были бы проведены связи в реляционной модели БД.
У вас получается, что автор - есть книги, а отдел - есть автор. Хотя может с именами классов просто фигня. Я особо в суть дела не вникал
pu4koff вне форума Ответить с цитированием
Старый 05.04.2009, 17:41   #9
z3rg
Пользователь
 
Регистрация: 17.02.2009
Сообщений: 25
По умолчанию

спасибо, переделал но чето не хочет выводить, выводит =======*** -такую фигню
Код:
# include <iostream.h>
# include <iomanip.h>

class knigi
{
int n;
char **mas;
public:
	knigi(){

mas = new char*[10]; // 10 ñòðîê
for (int i = 0; i < 10; i++)
{
  mas[i] = new char[100]; 
}
}

	~knigi(){
	for (int i = 0; i < 10; i++){
  delete[] mas[i];}
delete[] mas;
	}
	void vvod();
	void vivod(int);
};

void knigi::vvod(){
cout<<"vvedite knigi"<<endl;
for(int i=0;i<10;i++){
cin>>mas[i];
}
}

void knigi::vivod(int x){
	cout<<"kniga:"<<mas[x]<<endl;
}

class avtor:public knigi
{
char **av;
public:
	avtor(){
	av = new char*[10];
for(int i=0; i<10;i++){
	av[i] = new char[100];
}
	}
	~avtor(){
	for(int i=0;i<10;i++)
	{
  delete[] av[i];
}
delete[] av;
	}
	void vvodav();
	void vivot(int);
};

void avtor::vvodav()
{
	for(int i=0;i<10;i++){
	vivod(i);
	}

	int d;
cout<<"dobavit avtora dla knigi nomber:";
cin>>d;
		cin>>av[d];
	}

void avtor::vivot(int c){
    vivod(c);
	if(av[c]!=""){
	cout<<"avtor:"<<av[c]<<endl;
	}
}


class otdel: public avtor
{
public:
	otdel(){}
	~otdel(){}

	void vivotallknig();
};

void otdel::vivotallknig(){
	for(int i=0; i<10; i++){
	    vivot(i);
	}
}

void main(){
knigi bb;
bb.vvod();
avtor cc;
cc.vvodav();
otdel dd;
dd.vivotallknig();
}
z3rg вне форума Ответить с цитированием
Старый 05.04.2009, 17:54   #10
pu4koff
Старожил
 
Аватар для pu4koff
 
Регистрация: 22.05.2007
Сообщений: 9,065
По умолчанию

Вы вводите строки в bb. Выводите строки для объектов cc и dd. Перечитывайте про ООП, т.к. явно неправильное понимание у Вас.
pu4koff вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
динамический массив Dimon Паскаль, Turbo Pascal, PascalABC.NET 3 21.03.2008 18:08
Работа со строками типа Char Horror Общие вопросы C/C++ 4 02.02.2008 19:45
Динамический массив. Mickle Помощь студентам 9 21.06.2007 20:31
Динамический массив Mickle Общие вопросы Delphi 8 19.06.2007 06:45
Динамический сивольный массив lacost Общие вопросы C/C++ 6 21.04.2007 11:48