Имя пользователя:
Пароль:
 | Правила  

Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Программирование и базы данных » C/C++ - [решено] Непонятный вызов класса в C++

Ответить
Настройки темы
C/C++ - [решено] Непонятный вызов класса в C++

Пользователь


Сообщения: 62
Благодарности: 0

Профиль | Отправить PM | Цитировать


Вложения
Тип файла: rar 3.rar
(5.9 Kb, 12 просмотров)
Когда изучал классы в C++ на уроках было показано два примера
как можно пользоватся классами в коде
Например на основе трёх файлов:

main.cpp

Код: Выделить весь код
#include <iostream>
#include <string>
using namespace std;
#include "SharedConfig.h"
#include "SharedConfig.cpp"

int main()
{
// Первый способ с последующим вызовом через "."
CSharedConfig class1;

cout << "Service ";
cout << class1.GetAppVersion() <<endl;
cout << endl;

// Второй способ с последующим вызовом через "->"
CSharedConfig *class2 = new CSharedConfig;

cout << "Service ";
cout << class2->GetAppVersion() <<endl;
cout << endl;
delete class2;

system("pause");
return 0;
}
SharedConfig.h

Код: Выделить весь код
#pragma once

class CSharedConfig
{
public:
string GetAppVersion();
};
SharedConfig.cpp

Код: Выделить весь код
#include "SharedConfig.h"

string CSharedConfig::GetAppVersion()
{
return "0.1.5";
}
Всё работает исправно
А сейчас разбираю один код и мне попался непонятный метод вызова
функции через класс

Код: Выделить весь код
#include <iostream>
#include <string>
using namespace std;
#include "SharedConfig.h"
#include "SharedConfig.cpp"

int main()
{
// Третий способ ???
cout << "Service ";
cout << CSharedConfig::Shared()->GetAppVersion() <<endl;
cout << endl;

system("pause");
return 0;
}
Как понять этот способ

Что для этого нужно прописать в файле - SharedConfig.h
то есть как нужно оформить написание класса

И что нужно прописать в файле - SharedConfig.cpp
то есть что нужно вписать помимо функции (функция та что и выше)

Попробую прикрепить функции разбираемого кода

Отправлено: 19:30, 29-03-2014

 

Пользователь


Сообщения: 62
Благодарности: 0

Профиль | Отправить PM | Цитировать


На одном форуме подсказали одно решение для этой надстройки

CSharedConfig::Shared()->GetAppVersion()

Правда оно не совсем то что в разбираемых мною файлах
Но главное что работает

Код: Выделить весь код
#include <iostream>
#include <string>
using namespace std;

class CSharedConfig
{
public:
static CSharedConfig* Shared()
{
return new CSharedConfig;
}

string GetAppVersion();
};
 
string CSharedConfig::GetAppVersion()
{
return "0.1.5";
}
 
int main()
{
cout << "Service ";
cout << CSharedConfig::Shared()->GetAppVersion() <<endl;
cout << endl;
system("pause");
return 0;
}
И ещё один способ подсказали объявление функции через класс

CSharedConfig::GetAppVersion()

Код: Выделить весь код
#include <iostream>
#include <string>
using namespace std;

class CSharedConfig
{
public:
static string GetAppVersion();
};
 
string CSharedConfig::GetAppVersion()
{
return "0.1.5";
}
 
int main()
{
cout << "Service ";
cout << CSharedConfig::GetAppVersion() <<endl;
cout << endl;
system("pause");
}

Отправлено: 22:58, 29-03-2014 | #2



Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети.

Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля.


Аватара для deviance

Пользователь


Сообщения: 123
Благодарности: 43

Профиль | Отправить PM | Цитировать


Попробую ответить на вопрос "Как понять этот способ?".
Класс CSharedConfig реализует один из шалонов проектирования ООП - он называется Одиночка.
Метод CSharedConfig::Shared() предоставляет доступ к экземпляру класса и гарантирует, что экземпляр будет только один.
Код: Выделить весь код
CSharedConfig* CSharedConfig::Shared()
{
	if (m_Instance == 0)
		m_Instance = new CSharedConfig();
	return m_Instance;
}
Вы внесли ошибку своим изменением:
Код: Выделить весь код
static CSharedConfig* Shared()
{
return new CSharedConfig;
}
Память будет "утекать" с каждым вызовом метода CSharedConfig::Shared(). Имейте в виду.
Это сообщение посчитали полезным следующие участники:

Отправлено: 00:38, 30-03-2014 | #3



Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Программирование и базы данных » C/C++ - [решено] Непонятный вызов класса в C++

Участник сейчас на форуме Участник сейчас на форуме Участник вне форума Участник вне форума Автор темы Автор темы Шапка темы Сообщение прикреплено

Похожие темы
Название темы Автор Информация о форуме Ответов Последнее сообщение
Java - Вызов метода EJB veter48 Программирование и базы данных 0 16-09-2013 15:41
PowerShell - Вызов скриптов. impulse107 Скриптовые языки администрирования Windows 1 23-05-2013 18:31
CMD/BAT - Многократный вызов программы Smasher Скриптовые языки администрирования Windows 2 25-09-2012 23:51
javascript странный вызов bruder Вебмастеру 4 25-02-2008 13:43
Вызов процедуры ToX Программирование и базы данных 10 24-07-2004 00:11




 
Переход