Форум программистов, компьютерный форум CyberForum.ru

Абстрактная фабрика - C++

Восстановить пароль Регистрация
Другие темы раздела
C++ Удалить из массива все отрицательные элементы http://www.cyberforum.ru/cpp-beginners/thread589547.html
удалить из массива все отрицательные элементы . под удалением элемента следует понимать : исключение этого элемента из массива путем смешения всех следующий за ним элементов влево на одну позицию.(решите пожалуйста без генератора случайных чисел)
C++ Функциональный тип через typedef Приветствую, нужна помощь в решении задачи: В файле заданы строки из 5-ти чисел: границы отрезка, точность, номер функции и номер метода. Номер функции = {1,2,3}, где 1. f(x)=x3-x-9; 2. f(x)=sinx-1; 3. f(x)=x+2. Номер метода = {1,2}, где 1. хорд; 2. касательных. На заданном отрезке с заданной точностью вычислить приближенно корень уравнения f(x)=0 для заданной функции заданным методом. http://www.cyberforum.ru/cpp-beginners/thread589525.html
Вывести список файлов в каталоге C++
Напишите программу, которая составляет список файлов, расположенных в каталоге, имя которого задается в командной строке и создает текстовый файл, в котором имена файлов располагаются в порядке увеличения количества строк, содержащихся в них.
компилятор с++ C++
кто знает может можно сделать так чтоб компилятор не использовал фиксированных адресов, а использовал только относительное смещение?
C++ Наследование: Создать класс двигатель http://www.cyberforum.ru/cpp-beginners/thread589502.html
Создать класс двигатель, имеющий мощность. Определить конструкторы и метод доступа Создать класс автомашины, содержащий класс двигатель. Дополнительно есть марка (указатель на строку) и стоимость. Определить конструкторы и деструктор. Определить public- производный класс грузовик, имеющий грузоподъемность и тип кузова. Определить конструкторы и функцию печати. Где ошибка в программе? ...
C++ Сформировать массив из n элементов (n<50) Задача 113. Сформировать массив из n элементов (n<50), которыми могут быть только целые числа 0 и 1. Проверить, существует ли строгое чередование 0 и 1. подробнее

Показать сообщение отдельно
PitMagnum
3 / 3 / 0
Регистрация: 28.05.2012
Сообщений: 16
28.05.2012, 20:53     Абстрактная фабрика
Здравствуйте, у меня проблема следующего рода. Есть абстрактный класс Player. Есть два класса наследника Human и Computer, предназначенные для абсолютно дурацкой игры "3 пальца" (но это не важно)

Код
class Player{
private:
	int fing;  // Количество пальцев
	int score; // Очки
public:
	Player(){
		fing = 0;       // Конструктор
		score = 0;
	}
	~Player(){
		fing = 0;       // Деструктор
		score = 0;
	}

	void win(int y)	{score += y;}	//Прибавить счет
	int  score()	{return score;}	//Выдать счет
	int  get_fing()	{return fing;}	//Выдать палец

	virtual void set_fing() = 0;	//Присвоить палец
	
};


class Computer: public Player{
public:
	virtual void set_fing(){	//Присвоить палец
		fing = rand()%3+1;
		printf("Computer has shown %d fingers\n", fing);
		sleep(1);
	}
	
};

class Human: public Player{
public:
	virtual void set_fing(){	//Присвоить палец
		printf("Enter a number from 1 to 3: ");

		int t = 1;
		while(t){
			scanf("%d\n", &fing);
			if (fing<1 || fing>3){
				printf("Incorrect number, please try again\n");
			}
			else t = 0;
		}
		printf("Player has shown   %d fingers\n", fing);
		sleep(1);
	}
};
В самом начале этой игры консоль должна опоросить пользователя, в какой режим игры он выбирает: Human vs Computer, Computer vs Computer или Human vs Human. Если режим выбран Human vs Computer, то также требуется спросить пользователя, хочет ли он быть четным или нечетным (всмысле ходить первым или вторым). В зависимости от того, что выберет в итоге пользователь, мы создадим два объекта - A и B. A будет ходить первым и будет считаться нечетным, B - наоборот, второй и четный. Так вот, A и B могут быть как Human, так и Computer (это зависит от режима игры). Лично я создавал эти объекты простым case'ом:

Код
switch(gmode){

case 1:{
	int ev;
	printf("\nWould you like to be odd or even? (O/E) ");
	int t = 1;
	while(t){
		scanf("%d", &ev);
		if (ev!="O" || ev!="E"){
			printf("Incorrect character, please try again\n");
		}
		else t = 0;
	}

	if(ev=="O"){
		Player *A = new Human;
		Player *B = new Computer;
	}
	else{
		Player *A = new Computer;
		Player *B = new Human;
	}
}
break;

case 2:{
	Player *A = new Human;
	Player *B = new Human;
}
break;

case 3:{
	Player *A = new Computer;
	Player *B = new Computer;
}
break;
}
Однако же препод забраковал такой подход и сказал, что было бы куда лучше если бы я использовал абстрактную фабрику для создания объектов, а case это плохо и нечитабельно (хотя по мне, так все предельно понятно).

Я понимаю, что из себя представляет фабричный метод и что такое абстрактная фабрика, но концы с концами свести не могу - запутался. Помогите, пожалуйста
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
 
Текущее время: 14:19. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru