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

Объясните пожалуйста паттерн фабрика - C++

Восстановить пароль Регистрация
Другие темы раздела
C++ Запрос информации о пользователь*ских соединениях с Terminal Server http://www.cyberforum.ru/cpp-beginners/thread917317.html
Hi there, Есть проблемма, нужно получить информацию относительно залогиненого пользователя в терминале TSRV 2003-2008(неважно, хоть ХП с удалённым подключением) с этой задачей как по мне справляется в полной мере следующий набо ЦМДшных команд: net use /user:login \\192.168.1.1\IPC$ password query user login_name /server:192.168.1.1 Но мне очень хотелось бы узнать какими методами это...
C++ Использование одной структуры для линейного однонаправленного и двунаправленного списков Собираюсь использовать в программе линейный однонаправленный список и линейный двунаправленный список. Можно ли использовать одну структуру для этих двух типов списков? Т.е. указатель previous в линейном списке будет пустовать. В программе будет реализовываться стэк(в методичке написано, что лучше через однонаправленный) и очередь(там же написано, что лучше через двунаправленый). struct element... http://www.cyberforum.ru/cpp-beginners/thread917298.html
C++ Как открыть любой файл по желанию пользователя
Необходимо открыть файл по желанию пользователя, необходимо чтоб текст из файла отоброжался на консоли. вот код // ConsoleApplication1.cpp: определяет точку входа для консольного приложения. // #define _CRT_SECURE_NO_WARNINGS #include "stdafx.h"
C++ Считать с файла строку типа char до знака окончания строки
Всем доброго времени суток. Мне нужно считать с файла строку типа char до знака окончания строки ( '\0'). Как мне это сделать? Я использую MS Visual Studio 2010. Для считывания с файла я использую freopen("input.txt","r",stdin). Пишите если знаете как оптимизировать код. Заранее спасибо! ;-) Код: #include <stdio.h>; #include <iostream>;
C++ Посоветуйте литературу по STL http://www.cyberforum.ru/cpp-beginners/thread917276.html
Посоветуйте хорошую литературу по стандартной библиотеке с заданиями, а то начал читать "Николай Джосьютис The C++ Standard Library. A Tutorial and Reference", но тяжело потому что нету заданий, что бы закрепить прочитанное!
C++ Очередь как кольцевой массив Помогите, пожалуйста, написать программу: "очередь как кольцевой массив, найти кол-во положительных элементов". Знаю, что можно найти решение поставленной задачи, но я видел столько вариантов подхода к этим очередям, что уже мозг сломал... подробнее

Показать сообщение отдельно
MrGluck
Ворчун
Эксперт С++
 Аватар для MrGluck
4923 / 2666 / 243
Регистрация: 29.11.2010
Сообщений: 7,421
04.07.2013, 02:47     Объясните пожалуйста паттерн фабрика
А то, что указатель на базовый класс может указывать на производный вы понимаете?
Т.е. вот так:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
#include <iostream>
 
// абстрактный класс
class Shape
{
    public:
        // чисто виртуальная функция имеет реализацию. Фигура может быть нарисована
        // ошибка, нельзя иметь реализацию внутри класса
        //virtual void draw() const = 0 { std::cout << "Draw Shape\n"; }
        // объявляем прототип чисто виртуальной функции
        virtual void draw() const = 0;
};
 
// реализация чисто виртуальной функции. Все легально
void Shape::draw() const
{
    std::cout << "Draw Shape\n";
}
 
// наследуемся от класса-протокола Shape. Треугольник является фигурой
// наследуется интерфейс функции draw.
class Triangle : public Shape
{
    public:
        // переобределяем метод draw() const. Треугольник рисуется по другому
        virtual void draw() const { std::cout << "Draw Triangle\n"; }
};
 
// Прямоугольный треугольник является треугольником.
// наследуется интерфейс и реализация по-умолчанию функции draw
class RightTriangle : public Triangle
{
    public:
        // переобределяем метод draw() const. Прямоугольный треугольник рисуется по другому
        void draw() const { std::cout << "Draw Right Triangle\n"; }
};
 
int main()
{
    //Shape *ps = new Shape;        // ошибка - класс абстрактный
    Shape *ps1 = new Triangle;      // хорошо
    ps1->draw();                    // вызовется метод Triangle::draw() const
    Shape *ps2 = new RightTriangle; // хорошо
    ps2->draw();                    // вызовется метод RightTriangle::draw() const
    ps1->Shape::draw();             // вызовется метод Shape::draw() const
    //ps2->Triangle::draw();        // ошибка, Triangle является базовым классом
                                    // RightTriangle, но не Shape
    RightTriangle rt;
    rt.Triangle::draw();            // вызовется метод Triangle::draw() const
    rt.draw();                      // вызовется метод RightTriangle::draw() const
}
То, что в main происходит осознаете?
 
Текущее время: 04:20. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru