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

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

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

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

29.03.2014, 19:42. Просмотров 219. Ответов 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
то есть что нужно вписать помимо функции (функция та что и выше)

Попробую прикрепить функции разбираемого кода
0
Вложения
Тип файла: rar 3.rar (5.9 Кб, 2 просмотров)
Лучшие ответы (1)
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
29.03.2014, 19:42
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Непонятный вызов класса в C++ (C++):

Непонятный вызов конструктора класса - C++
Почему в строчке d1=500; (70 стр.) вызывается конструктор CDate(500, 1, 2000)? Получается, целое число 500 перед присваиванием каким то...

Непонятный вызов Деструкторов при создании списка - C++
Непонятный вызов Деструкторов при создании списка. #include &lt;iostream&gt; #include &lt;list&gt; #include &lt;vector&gt; #include &lt;string&gt; ...

Вызов метода производного класса через обращение к методу базового класса - C++
Добрый день. Изучаю основы ООП, наткнулся на проблему. Если создавать классы внутри main.cpp, то всё нормально. Если же создавать в...

Вызов метода класса без создания экземпляра класса. - C++
В общем мне для функционирования одной программы нужно постоянно вызывать метод одного из классов. Я это делаю с помощью new - delete. Мне...

Вызов объектом базового класса функцию из производного класса! - C++
Как можно осуществить вызов или передачу значения в базовый класс для дальнейшего вычисления этого значения в производном классе. Вот...

Вызов функций класса Dictionary функциями дружественного класса - C++
Функции класса Tree используют функции дружественного класса Dictionary,но вылетают ошибки,не находятся определения функций класа...

Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
zss
Модератор
Эксперт С++
6382 / 5947 / 1927
Регистрация: 18.12.2011
Сообщений: 15,264
Завершенные тесты: 1
29.03.2014, 19:49 #2
Так можно вызывать только статические данные и методы класса:
C++
1
static string GetAppVersion();
0
Wlk
49 / 49 / 13
Регистрация: 07.12.2011
Сообщений: 133
29.03.2014, 19:50 #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();
1
assch1
265 / 7 / 0
Регистрация: 13.01.2014
Сообщений: 29
29.03.2014, 20:13  [ТС] #4
Спасибо Wlk,

Добавлено через 7 минут
Я в C++ новичок
но честно говоря не понятно,
для чего могла понадобится эта лишняя надстройка при вызове функции из класса.
0
zss
Модератор
Эксперт С++
6382 / 5947 / 1927
Регистрация: 18.12.2011
Сообщений: 15,264
Завершенные тесты: 1
29.03.2014, 20:20 #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() ;
}
1
DrOffset
7156 / 4297 / 972
Регистрация: 30.01.2014
Сообщений: 7,101
29.03.2014, 23:09 #6
Цитата Сообщение от assch1 Посмотреть сообщение
для чего могла понадобится эта лишняя надстройка при вызове функции из класса.
Это могло понадобиться, например, при реализации синглтона.
0
Melg
538 / 159 / 64
Регистрация: 23.09.2013
Сообщений: 314
30.03.2014, 00:34 #7
На мой взгляд Вам стоит более детально почитать информацию о статических членнах класса, в частности - статических функциях. Осмысленность применения таких функций зависит от контекста задачи, но общая идея - возможность вызвать функцию без необходимости создания экземпляра объекта. Кроме того, как уже упоминали выше, такие функции используются для реализации унифицированного доступа к экземплярам объекта - когда статический метод предоставляет указатель на созданный (единственный) объект класса, при этом сам класс написан таким образом, что нет возможности создать объект никак иначе.
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
30.03.2014, 00:34
Привет! Вот еще темы с ответами:

Вызов динамического метода класса по указателю на объект класса - C++
Как это можно сделать? И хотелось бы как можно проще.

Вызов методов класса из двойного указателя на экземпляр класса - C++
Добрый день! Как можно вызвать метод класса по двойному указателя на его экземпляр? struct Point { void getPoint(){}; ...

Вызов метода внутреннего класса методом внешнего класса - C++
Не могу разобраться как реализовать вложенный класс и как его вызвать. Занимаюсь по Лафоре, про вложенные классы ничего, а задача в конце...

Вызов метода базового класса из класса-потомка - C++
Нужно вызывать из метода, переопределенного в потомке, соответствующий метод базового класса. При этом они являются виртуальными. Вот...


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

Или воспользуйтесь поиском по форуму:
Yandex
Объявления
30.03.2014, 00:34
Ответ Создать тему
Опции темы

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