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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 22.10.2010, 07:40   #11
pu4koff
Старожил
 
Аватар для pu4koff
 
Регистрация: 22.05.2007
Сообщений: 9,065
По умолчанию

Цитата:
Сообщение от ТриСемёрки Посмотреть сообщение
Прошу прощения за долгое отсутствие. И первый, второй и третий варианты в виде заготовок есть в MFC. А как подключить MFC в C++Builder 6?
Вряд ли это возможно.
Тут несколько вариантов, которые точно "взлетят":
1) Отказаться от использования MFC и найти что-то подходящее в VCL
2) Использовать для разработки Visual Studio
3) "Кишки" писать в Visual Studio в виде DLL с использованием MFC, а окошки - на Builder'e.
pu4koff вне форума Ответить с цитированием
Старый 24.12.2010, 11:51   #12
ТриСемёрки
Пользователь
 
Регистрация: 12.05.2010
Сообщений: 61
По умолчанию

Файл Interface.h

Код:
Код:
#ifndef _Interface
#define _Interface


class IVFSObject  {
public:
  virtual ~IVFSObject() {}                // Виртуальный деструктор
  virtual void get_name() = 0;           // Имя объекта
protected:
  char *Name;
  char *Adress;
//  char *Type_IVS;
};

// Файл. Расширяет возможности IVFSObject
class IFile: public IVFSObject  {
public:
  IFile ();
  virtual void get_name_type() = 0;                 // Имя расширения файла
protected:
  char *Type_of_file;
  int   Id;                    //?
};

//---------------------------------------------------------------------------

#endif
Файл unit2.cpp
Код:
Код:
#include <iostream.h>
#include "Interface.h"

char* rus(char *str)    {
   unsigned char *p=NULL;
   char* str2="";
   strcpy(str2,str);
   str=NULL;
   p=str2;
   while (*p)      {
      if ((*p)>=192)
         if ((*p)<=239)
            (*p)=(*p)-64;
         else
            (*p)=(*p)-16;
      p++;
   }
   return str2;
};
//===========================================================================

class IDriver {
public:
   virtual void get_name_Driver() = 0;
};
//===========================================================================

class Native: public IDriver {
public:
   char* Name;
   virtual void get_name_Driver() {
       char S[]="";
       cout<<rus("Native");
       cin>>S;
       Name=S;
   };
//---------------------------------------------------------------------------
   class File: public IFile {
      public:
       virtual void get_name_type(){
            char S[]="";
            cout<<rus("Введите расширение файла :");
            cin>>S;
            Type_of_file=S;
         };
         virtual void get_name () {
            char S[]="";
            cout<<rus("Введите имя файла: ");
            cin>>S;
            Name=S;
         };
файл unit1.cpp

Код:
Код:
#include "Interface.h"
#include "Unit2.cpp"

//------------------------------------------------------------------------
// Абстрактная фабрика
class IDriverFactory   {
	public:
		virtual IDriver* createDriver() = 0;
};

// ConcreteFactory1
class NativeFactory : public IDriverFactory   {
	public:
      // from IDriverFactory
      virtual IDriver* createDriver()	{
      cout<<"Created VFS Native"<<endl;
      return new Native();
                }

};

// ConcreteFactory2
class BlockFactory : public IDriverFactory   {
	public:
      // from IDriverFactory
 virtual IDriver* createDriver()	{
      cout<<"Created VFS Block"<<endl;
      return new Block();
      }
};

// ConcreteFactory3
class FtpFactory : public IDriverFactory   {
   public:
      //from IDriverFactory
      virtual IDriver* createDriver ()   {
      cout<<"Created VFS FTP"<<endl;
      return new Ftp();
      }
};
//------------------------------------------------------------------------
//

void use(IDriverFactory* d)
{       int a;
	IDriver* myDriver= d->createDriver();
   cin>>a;
   while (a!=0) {
        if (a==1) myDriver->get_name_Driver();
        if (a==2) (myDriver.File)->get_name_type();
        cin>>a;
        }
}




int main(int argc, char* argv[])
{
   int a;
   NativeFactory nativeFactory;
   BlockFactory blockFactory;
   FtpFactory ftpFactory;
   cout<<rus("Введите Вашу команду0: ");
        cin>>a;
        while (a!=0) {
                if (a==1) use(&nativeFactory);
                if (a==2) use(&blockFactory);
                if (a==3) use(&ftpFactory);
                cout<<rus("Введите Вашу команду1: ");
        cin>>a;
        }
   return 0;
}
//---------------------------------------------------------------------------
Проблема состоит в том, что пытаюсь обратится к функции File.get_name_type(), и получаю в ответ не весть что (что бы не изменял). Возможно проблема в построении программы, но скорее всего в другом.

(Не так работаю с вложенными классами?)
Либо засунуть класс Native в NativeFactory?
ТриСемёрки вне форума Ответить с цитированием
Старый 24.12.2010, 12:27   #13
pu4koff
Старожил
 
Аватар для pu4koff
 
Регистрация: 22.05.2007
Сообщений: 9,065
По умолчанию

Код:
char S[]="";
Тут под S выделяется 1 байт под символ конца строки, т.е. записывать потом введенную пользователем строку некуда.
Либо топорно:
Код:
char S[255] = "";
либо использовать std::string или аналоги.
pu4koff вне форума Ответить с цитированием
Старый 25.12.2010, 11:57   #14
ТриСемёрки
Пользователь
 
Регистрация: 12.05.2010
Сообщений: 61
По умолчанию

char S[]=" "; - Прокатит?
ТриСемёрки вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Моделирование файловой системы NTFS muslimer Помощь студентам 3 07.10.2013 10:25
Устройство файловой системы Alexandr-vi-92 Операционные системы общие вопросы 2 06.11.2008 08:14
Парсер файловой системы FAT32 svennick Общие вопросы C/C++ 4 26.03.2008 23:26
драйвер виртуальной файловой системы OrdJONY Свободное общение 2 29.12.2007 18:06