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

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
assch1
264 / 6 / 0
Регистрация: 13.01.2014
Сообщений: 21
#1

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

29.03.2014, 19:42. Просмотров 214. Ответов 6
Метки нет (Все метки)

Когда изучал классы в 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
Модератор
Эксперт С++
6276 / 5879 / 1902
Регистрация: 18.12.2011
Сообщений: 15,076
Завершенные тесты: 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
264 / 6 / 0
Регистрация: 13.01.2014
Сообщений: 21
29.03.2014, 20:13  [ТС]     Непонятный вызов класса в C++ #4
Спасибо Wlk,

Добавлено через 7 минут
Я в C++ новичок
но честно говоря не понятно,
для чего могла понадобится эта лишняя надстройка при вызове функции из класса.
zss
Модератор
Эксперт С++
6276 / 5879 / 1902
Регистрация: 18.12.2011
Сообщений: 15,076
Завершенные тесты: 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
6909 / 4102 / 933
Регистрация: 30.01.2014
Сообщений: 6,893
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++
C++ STL вызов метода класса
C++ Вызов функций дружественного класса

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

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

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru