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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 14.02.2015, 14:47   #1
mc13
Форумчанин
 
Аватар для mc13
 
Регистрация: 03.01.2015
Сообщений: 109
По умолчанию Как вызвать функцию класса из функции др класса?

Код:
class ADMINISTRATOR
{
	public:

 void CallADMIN()
	{
		cout << "Вызов Администратора\n\n";
		FaceControl();
		cout << "Поиск CodeLog\t";

        string FileNameStr("CodeLog.txt");
        ArhiReader(FileNameStr);//Вот тут вызов
}
}

class ARHIVARIUS
{
  public:

  int ArhiReader(string FileNameStr)
  {
    cout << "Чтение" << "(" << FileNameStr << ").\n";
    string StrReader;
    fstream FileReader(FileNameStr.c_str());

    if (FileReader.is_open())
    {
      while (getline(FileReader,StrReader))
      {
      cout << StrReader << '\n';
      }
      FileReader.close();
    }
    else
    {
        StrReader = "Не удалось открыть файл\n";
        cout << StrReader;
    }
  }
}

Последний раз редактировалось Stilet; 14.02.2015 в 15:16.
mc13 вне форума Ответить с цитированием
Старый 14.02.2015, 15:17   #2
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Для этого я бы описал некое поле класса ARHIVARIUS в ADMINISTRATOR, в которое бы создавал или передавал экземпляр класса ARHIVARIUS, и уже тогда из этого поля бы вызывал метод ArhiReader
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 14.02.2015, 16:48   #3
mc13
Форумчанин
 
Аватар для mc13
 
Регистрация: 03.01.2015
Сообщений: 109
По умолчанию

Цитата:
Сообщение от Stilet Посмотреть сообщение
Для этого я бы описал некое поле класса ARHIVARIUS в ADMINISTRATOR, в которое бы создавал или передавал экземпляр класса ARHIVARIUS, и уже тогда из этого поля бы вызывал метод ArhiReader
а как создать это поле? можно как то проще обьявить?

PHP код:
ARHIVARIUS arhivarius;
arhivarius.func(); 
мне нужен простой способ вызова подобно тому если бы я это делал из тела main()
mc13 вне форума Ответить с цитированием
Старый 14.02.2015, 16:55   #4
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Цитата:
можно как то проще обьявить?
Можно параметр передать в метод:
Код:
class ARHIVARIUS
{
 ....
}


class ADMINISTRATOR
{
	public:

 void CallADMIN(ARHIVARIUS *arch)
	{
....
        arch->ArhiReader(FileNameStr);//Вот тут вызов
 }
}
Цитата:
мне нужен простой способ вызова
И как же ты представляешь смысл слова "простой" в ООП?
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 14.02.2015, 17:01   #5
Alex11223
Старожил
 
Аватар для Alex11223
 
Регистрация: 12.01.2011
Сообщений: 19,500
По умолчанию

Цитата:
мне нужен простой способ вызова подобно тому если бы я это делал из тела main()
Зачем вам классы с таким подходом? Функции и используйте. Ну или все методы статическими сделайте.
Ушел с форума, https://www.programmersforum.rocks, alex.pantec@gmail.com, https://github.com/AlexP11223
ЛС отключены Аларом.
Alex11223 вне форума Ответить с цитированием
Старый 14.02.2015, 17:11   #6
mc13
Форумчанин
 
Аватар для mc13
 
Регистрация: 03.01.2015
Сообщений: 109
По умолчанию

Цитата:
Сообщение от Stilet Посмотреть сообщение
Можно параметр передать в метод:
Код:
class ARHIVARIUS
{
 ....
}


class ADMINISTRATOR
{
	public:

 void CallADMIN(ARHIVARIUS *arch)
	{
....
        arch->ArhiReader(FileNameStr);//Вот тут вызов
 }
}
И как же ты представляешь смысл слова "простой" в ООП?
вот это мне кажется очень даже простой сспособ
Код:
ARHIVARIUS arhivarius;
arhivarius.func();
а вот это почему то не работает

Код:
class ARHIVARIUS
{
 ....
}


class ADMINISTRATOR
{
	public:

 void CallADMIN(ARHIVARIUS *arch)
	{
....
        arch->ArhiReader(FileNameStr);//Вот тут вызов
 }
}
и ещё по поводу можно параметр передать в метод, как я его потом буду из main вызывать? разве можно будет к void CallADMIN(ARHIVARIUS *arch) обращаться так void CallADMIN(); ?

Последний раз редактировалось Stilet; 15.02.2015 в 09:59.
mc13 вне форума Ответить с цитированием
Старый 14.02.2015, 17:13   #7
mc13
Форумчанин
 
Аватар для mc13
 
Регистрация: 03.01.2015
Сообщений: 109
По умолчанию

Цитата:
Сообщение от Alex11223 Посмотреть сообщение
Зачем вам классы с таким подходом? Функции и используйте. Ну или все методы статическими сделайте.
По задумке программа будет большой и если уйти от классов боюсь будет хаос
Код:
#include <stdio.h>
#include <time.h>
#include <iostream>
#include <fstream>
#include <string.h>

using namespace std;

class ADMINISTRATOR
{
	public:

 void CallADMIN(ARHIVARIUS *arhivarius)
	{
		cout << "Вызов Администратора\n\n";
		FaceControl();
		cout << "Поиск CodeLog\t";

        string FileNameStr("CodeLog.txt");
        arhivarius -> ArhiReader(FileNameStr);
	}

	void FaceControl()
	{
	  string Face = "Новый пользыватель";
	  int FaceId = 0;

		cout << "Проверка доступа\t";
		if(Face == "Пользыватель")
		{
			cout << "Авторизован\n";
		}
		else
		{
			cout << " Готово\n";
		}
		cout << Face << ".id," << FaceId <<"\n\n";

	}
};

class ARHIVARIUS
{
  public:

  int ArhiReader(string FileNameStr)
  {
    cout << "Чтение" << "(" << FileNameStr << ").\n";
    string StrReader;
    fstream FileReader(FileNameStr.c_str());

    if (FileReader.is_open())
    {
      while (getline(FileReader,StrReader))
      {
      cout << StrReader << '\n';
      }
      FileReader.close();
    }
    else
    {
        StrReader = "Не удалось открыть файл\n";
        cout << StrReader;
    }
  }//ArhiRider()

  void ArhiWriter(string StrWriter)
  {
    fstream FileWriter("CodeLog.txt", ios::out | ios::app | ios::binary);

    if(FileWriter.is_open())
    {
      FileWriter << StrWriter;
      FileWriter.close();
    }
    else cout << "Не удалось открыть файл\n";
  }//ArhiWriter()

  void Analizator()
  {
    streampos begin,end;
    ifstream myfile ("CodeLog.txt", ios::binary);
    begin = myfile.tellg();
    myfile.seekg (0, ios::end);
    end = myfile.tellg();
    myfile.close();
    cout << "Размер файла: " << (end-begin) << " bytes.\n";
  }
};

class sms
{
  public:
	void hello()
	{
		string hello = "\n\nПрограмма готова к работе\n";
		cout << hello;
	}// hello

	 void comandlist()//Список функций.
   {
   	cout << "\n\t******Список команд:******\n";
   	cout << "\tВыход из программы,    код:0\n";
   	cout << "\tУзнать текущее время,  код:1\n";
   	cout << "\tСписок команд,         код:2\n";
   	cout << "\tАдминистративный режим,код:3\n";
   	cout << "\t***************************\n\n";

   }//comandlist
};//sms

class asosin : public sms
{
public:
   bool password(string pass)
   {
     if(pass == "1234")
     	return 1;
   		else
    	{
   		  cout << "Неверный пороль!\n";
   		  return 0;
   	  }
   }//password

   void mysecret()
   {
   string c;
   	cout << "ДОСТУП ОГРАНИЧЕН!!!\n";
   	do
   	{
   	  cout << "Административный режим введите пороль:";
   		cin >> c;
   		if(c == "2345")
   		{
   			cout << "\n\t===========Доступ разрешен=======\n";
   			cout << "\tПрочитать файл :1.\n";
   			cout << "\tЗаписать в файл:2.\n";
   			cout << "\t====================<<Назад:0.===\n";
   			//c = "0";
   			do
   			{
   				cout << "Административный режим. << Назад:0.\n";
   				cout << "Команда:";
   				cin >> c;
   			}
   			while(c!="0");
   		}
   		else
   		{
   			cout << "Неверный пороль!\t Нет доступа.\n\n";
   			c = "0";
   		}
   	}// do
   	while(c != "0");
   }

	 void time()// Функция время.
   {
    const time_t timer = ::time(NULL);
    cout << ctime(&timer);
   }


   void exit()// функция выхода
   {
   	cout << "***Пока***\n";
   	//sleep(3);
   }//exit
};//asosin

int main()
{
  asosin asosinout;          // класс asosin
  ARHIVARIUS arhivarius;    //класс arhivarius
  sms smsinout;            // класс sms
  ADMINISTRATOR administrator;// класс администратор

  administrator.CallADMIN();
  string FileNameStr("CodeLog.txt");
  arhivarius.ArhiReader(FileNameStr);
  int a;
  string passwords;

  do
  {
 	  cout << "Пороль:";
 	  cin >> passwords;
  }
  while(!(asosinout.password(passwords)));

  smsinout.hello();


  asosinout.time();// вызов времени
  smsinout.comandlist();//список команд

  do
  {
    cout << "Главное меню. Код команды: ";
    cin >> a;
    switch(a)
    {
      case 0://выход
      asosinout.exit();
      return 0;

 	    case 1://время
   	  asosinout.time();
     	break;

 	    case 2://список команд
 	    asosinout.comandlist();
 	    break;

 	    case 3://административный режим
 	    asosinout.mysecret();
 	    break;

 	    default:
 	    cout << "Такой команды нет\n";
    }
  }
  while(a != '0');
  return 0;
}

Последний раз редактировалось Stilet; 15.02.2015 в 09:59.
mc13 вне форума Ответить с цитированием
Старый 14.02.2015, 17:17   #8
Alex11223
Старожил
 
Аватар для Alex11223
 
Регистрация: 12.01.2011
Сообщений: 19,500
По умолчанию

Цитата:
По задумке программа будет большой и если уйти от классов боюсь будет хаос
Да у вас и так хаос, даже с форматированием кода и названиями.

Цитата:
разве можно будет к void CallADMIN(ARHIVARIUS *arch) обращаться так void CallADMIN(); ?
Нет конечно, зачем так делать?

Я так и не понял зачем вы мучаетесь с классами если они вам только мешают. Или почитайте что-нибудь про ООП, или выкиньте классы (или сделайте все методы static).
Ушел с форума, https://www.programmersforum.rocks, alex.pantec@gmail.com, https://github.com/AlexP11223
ЛС отключены Аларом.
Alex11223 вне форума Ответить с цитированием
Старый 14.02.2015, 17:23   #9
mc13
Форумчанин
 
Аватар для mc13
 
Регистрация: 03.01.2015
Сообщений: 109
По умолчанию

Цитата:
Сообщение от Alex11223 Посмотреть сообщение
Да у вас и так хаос, даже с форматированием кода и названиями.


Нет конечно, зачем так делать?

Я так и не понял зачем вы мучаетесь с классами если они вам только мешают. Или почитайте что-нибудь про ООП, или выкиньте классы (или сделайте все методы static).
как сделать их static? так?

Код:
static int ArhiReader(string FileNameStr)
  {
    cout << "Чтение" << "(" << FileNameStr << ").\n";
    string StrReader;
    fstream FileReader(FileNameStr.c_str());

    if (FileReader.is_open())
    {
      while (getline(FileReader,StrReader))
      {
      cout << StrReader << '\n';
      }
      FileReader.close();
    }
    else
    {
        StrReader = "Не удалось открыть файл\n";
        cout << StrReader;
    }
  }//ArhiRider()
если да то как теперь к ниму оброщатся из метода другого класса ?

Последний раз редактировалось Stilet; 15.02.2015 в 09:59.
mc13 вне форума Ответить с цитированием
Старый 14.02.2015, 17:27   #10
Alex11223
Старожил
 
Аватар для Alex11223
 
Регистрация: 12.01.2011
Сообщений: 19,500
По умолчанию

Код:
Class::method();
Ушел с форума, https://www.programmersforum.rocks, alex.pantec@gmail.com, https://github.com/AlexP11223
ЛС отключены Аларом.
Alex11223 вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Вызов функции из одного класса кнопкой из другого класса lexflax Qt и кроссплатформенное программирование С/С++ 1 12.12.2014 21:48
Как вызвать функцию из класса ? Silly Student Общие вопросы C/C++ 2 13.10.2011 20:07
Обращение к из одной функции класса к другой того же класса,не указывая к какому объекту она относиться zipwind C++ Builder 1 09.04.2011 17:18
Вызвать функцию с известной сигнатурой для неизвестного класса. Интерфейс Ferrum26 Общие вопросы Delphi 4 22.07.2010 14:26
Как вызвать метод из другого класса в C# KobolD Помощь студентам 6 25.06.2010 14:12