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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 29.11.2009, 23:52   #1
mishutka999
Новичок
Джуниор
 
Регистрация: 29.11.2009
Сообщений: 3
По умолчанию Передать массив базового абстрактного класса функциям производных классов

есть полностью абстрактный (виртуальный) класс. там все функции виртуальные и равны 0. Назовем его class A
есть 3 производных ОТ НЕГО класса. Например class X, class Y, class Z.
сложность в том, что в классе А должен создаться символьный двумерный массив и этот массив юзают (меняют в нем значения) классы X, Y, Z. Именно один и тот же массив!!!


Код:
class A
{public: 
	virtual void fuck() = 0;
	static char *mas;
};
Код:
class X: public A
{public:

	void A_mas()
		{
		mas[0][0]=(char)15;     //error C2109: subscript requires array or pointer type
		mas[1][1]=(char)15;
		mas[2][2]=(char)15;
		}

	void fuck()
		{ 
		cout<<"class X____"<<mas[1][1]<<"\n";
		}
};
Код:

class Y: public A
{public:

	void fuck()
		{if (mas[1][1]==(char)15)
			{mas[1][1]=(char)3;}
		
		cout<<"class Y____"<<mas[1][1]<<"\n";
		}
};
Код:

class Z: public A
{public:
	void fuck()
		{ cout<<"class Z_____"<<mas[2][2]<<"\n";}
};
Код:
char* A::mas=0;


int main()
{
 A *a;

 A::mas=new char[3][3];


 X x;
 Y y;
 Z z;

 a=&x;
 x.A_mas();
 a->fuck();

 a=&y;
 a->fuck();

 a=&z;
 a->fuck();


 return 1;
}
Сложность в том, что когда в этом коде символьный ОДНОМЕРНЫЙ массив то все работает прекрасно, а когда двумерный, то компилятор выдает 8 ошибок, и я не могу понять как их исправить.

Еще кое-что. Суть моей задачи (описанной вначале), я решил с помощью static в классе А, если есть другие варианты, то очень буду рад услышать.

Заранее буду благодарен за варианты решения проблемы.
mishutka999 вне форума Ответить с цитированием
Старый 30.11.2009, 00:48   #2
netrino
Участник клуба
 
Аватар для netrino
 
Регистрация: 15.07.2008
Сообщений: 1,933
По умолчанию

Во-первых, раз хотите использовать двумерный массив, то и указатель нужно объявлять соответствующим образом:
Код:
class A
{public: 
	virtual void fuck() = 0;
	static char **mas;
};
...
char** A::mas  = 0;
Во-вторых, нужно правильно инициализировать указатели:
Код:
A::mas = new char*[3];
for(int i = 0; i < 3; i++)
    A::mas[i] = new char[3];
netrino вне форума Ответить с цитированием
Старый 01.12.2009, 14:08   #3
mishutka999
Новичок
Джуниор
 
Регистрация: 29.11.2009
Сообщений: 3
По умолчанию

Спасибо большое за помощь!
Я просто редко работал с двумерными массивами, и поэтому не особо с ними разбираюсь.
mishutka999 вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Различие абстрактного класса и интерфейса(ООП) Ruzarh PHP 0 20.11.2009 15:29
Как передать весь результат запроса в массив? VladimirAleks Общие вопросы Delphi 5 22.10.2009 11:52
Создание классов и использование объектов классов при написании программ в среде C++. Frozen inside Помощь студентам 0 16.04.2009 23:18
Массив классов nns2009 Общие вопросы C/C++ 15 03.02.2009 00:47
Смена базового каталога диска в Вин ХР про Alpa Windows 3 23.09.2007 19:13