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

Непонятный вызов класса в C++ - C++

Восстановить пароль Регистрация
 
assch1
0 / 0 / 0
Регистрация: 13.01.2014
Сообщений: 7
29.03.2014, 19:42     Непонятный вызов класса в C++ #1
Когда изучал классы в 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
то есть что нужно вписать помимо функции (функция та что и выше)

Попробую прикрепить функции разбираемого кода
Вложения
Тип файла: rar 3.rar (5.9 Кб, 2 просмотров)
Лучшие ответы (1)
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
zss
Модератор
Эксперт С++
 Аватар для zss
5952 / 5557 / 1787
Регистрация: 18.12.2011
Сообщений: 14,201
Завершенные тесты: 1
29.03.2014, 19:49     Непонятный вызов класса в C++ #2
Так можно вызывать только статические данные и методы класса:
C++
1
static string GetAppVersion();
Wlk
49 / 49 / 13
Регистрация: 07.12.2011
Сообщений: 133
29.03.2014, 19:50     Непонятный вызов класса в C++ #3
Сообщение было отмечено автором темы, экспертом или модератором как ответ
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
class CSharedConfig
{
public:
    static CSharedConfig* Shared() {return new CSharedConfig;}
    string GetAppVersion();
};
 
string CSharedConfig::GetAppVersion()
{
    return "0.1.5";
}
 
int main()
{
CSharedConfig::Shared()->GetAppVersion() ;
}
Оператор pointer->method() эквивалентен (*pointer).method();
assch1
0 / 0 / 0
Регистрация: 13.01.2014
Сообщений: 7
29.03.2014, 20:13  [ТС]     Непонятный вызов класса в C++ #4
Спасибо Wlk,

Добавлено через 7 минут
Я в C++ новичок
но честно говоря не понятно,
для чего могла понадобится эта лишняя надстройка при вызове функции из класса.
zss
Модератор
Эксперт С++
 Аватар для zss
5952 / 5557 / 1787
Регистрация: 18.12.2011
Сообщений: 14,201
Завершенные тесты: 1
29.03.2014, 20:20     Непонятный вызов класса в C++ #5
Можно и без надстройки
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
#include <string>
using namespace std;
class CSharedConfig
{
public:
   static string GetAppVersion();
};
 
string CSharedConfig::GetAppVersion()
{
    return "0.1.5";
}
 
int main()
{
CSharedConfig::GetAppVersion() ;
}
DrOffset
6459 / 3833 / 885
Регистрация: 30.01.2014
Сообщений: 6,628
29.03.2014, 23:09     Непонятный вызов класса в C++ #6
Цитата Сообщение от assch1 Посмотреть сообщение
для чего могла понадобится эта лишняя надстройка при вызове функции из класса.
Это могло понадобиться, например, при реализации синглтона.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
30.03.2014, 00:34     Непонятный вызов класса в C++
Еще ссылки по теме:

Вызов метода внутреннего класса методом внешнего класса C++
C++ Непонятный вызов конструктора класса
Вызов конструктора базового класса из класса-наследника C++

Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
Melg
418 / 154 / 62
Регистрация: 23.09.2013
Сообщений: 306
30.03.2014, 00:34     Непонятный вызов класса в C++ #7
На мой взгляд Вам стоит более детально почитать информацию о статических членнах класса, в частности - статических функциях. Осмысленность применения таких функций зависит от контекста задачи, но общая идея - возможность вызвать функцию без необходимости создания экземпляра объекта. Кроме того, как уже упоминали выше, такие функции используются для реализации унифицированного доступа к экземплярам объекта - когда статический метод предоставляет указатель на созданный (единственный) объект класса, при этом сам класс написан таким образом, что нет возможности создать объект никак иначе.
Yandex
Объявления
30.03.2014, 00:34     Непонятный вызов класса в C++
Ответ Создать тему
Опции темы

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