Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.75/8: Рейтинг темы: голосов - 8, средняя оценка - 4.75
3 / 0 / 0
Регистрация: 08.07.2013
Сообщений: 351
1

Отделение интерфейса класса от его реализации

20.06.2014, 18:12. Показов 1483. Ответов 10
Метки нет (Все метки)

Всем привет!

Прочитал все найденные похоже темы, но ответа на свой вопрос я не нашел. Поэтому создаю тему...
Хочу отделить интерфейс от реализации так, чтобы в заголовочном файле (*.h) отсутствовало упоминание о данных-членах. Чтобы пользователи моего класса, используя оператор вызова функции-члена объекта, в выпадающем списке, видели только функции-члены без упоминания данных-членов.

Можно это реализовать?
__________________
Помощь в написании контрольных, курсовых и дипломных работ здесь
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
20.06.2014, 18:12
Ответы с готовыми решениями:

Отделение интерфейса от реализации класса: компиляция кода реализации
Доброго времени суток, У меня возникла проблема с отделением интерфейса от реализации класса....

Отделение интерфейса класса от реализации
Осваиваю раздел одной книги "Отделение интерфейса класса от реализации". То что получилось можно и...

Отделение интерфейса от реализации
Сделала рабочую программу. Нужно разделить интерфейс от реализации. Делаю как написано: добавить в...

Отделение интерфейса от реализации
Доброго времени суток! Имеется вопрос по теме, обозначенной в заголовке. Предположим, я...

10
76 / 71 / 55
Регистрация: 17.05.2014
Сообщений: 301
20.06.2014, 18:17 2
BESSON_off, вы хотите скрыть из кода класса некоторые поля? В текстовом редакторе их все равно увидят... Если вы хотите их скрыть из автокомплита, то можете извратиться, создав динамический массив int *value и засунув туда нужные значения. Пользователю ничего не скажет индекс элемента в этом массиве
0
2733 / 1892 / 564
Регистрация: 05.06.2014
Сообщений: 5,526
20.06.2014, 18:19 3
Можно это реализовать?
Можно, но с бубном.
C++
1
2
3
4
5
6
7
8
9
10
11
12
struct some_class_interface
{
    virtual void method1()=0;
    virtual void method2()=0;
    virtual~some_class_interface(){}
    static some_class_interface*new_some_class_object();
};
struct some_class:some_class_interface
{
    void method1(){}
    void method2(){}
};
Пользователям показывать только some_class_interface. Создавать объект some_class только через new_some_class_object.
0
135 / 134 / 53
Регистрация: 13.09.2013
Сообщений: 260
Записей в блоге: 2
20.06.2014, 18:19 4
Почитайте.
1
Don't worry, be happy
17274 / 10146 / 1963
Регистрация: 27.09.2012
Сообщений: 25,384
Записей в блоге: 1
20.06.2014, 18:49 5
Цитата Сообщение от BESSON_off Посмотреть сообщение
видели только функции-члены без упоминания данных-членов.
Ну можно как по Майерсу:
C++
1
2
3
4
5
6
7
8
9
10
11
//MyClass.h
//...
struct MyClass_impl ;
class MyClass {
   MyClass_impl * p ;
public:
   MyClass () ;
   /*...*/
   int getX () ;
} ;
//...
C++
1
2
3
4
5
6
7
8
9
10
11
//MyClass.cpp
struct MyClass_impl {
   int x ;
   int y ;
} ;
MyClass::MyClass () : p ( new MyClass_impl ) {
}
/*...*/
int MyClass::getX() {
   return p->x ;
}
Клиентам будет виден только указатель на реализацию.
1
3 / 0 / 0
Регистрация: 08.07.2013
Сообщений: 351
20.06.2014, 20:19  [ТС] 6
Делаю так:
Файл main.cpp
C++
1
2
3
4
5
6
7
#inc“ude "tЭst.h"
int main()
{
Test itsT;
cerr << itsT.getAge() << endl;
return 0;
}
Файл test.h
C++
1
2
3
4
5
6
7
class Test
{
int _itsAge;
public:
Test();
int getAge() const;
};
Файл test.cpp
C++
1
2
3
#include "test.h"
Test::Test(): _itsAge(0) {}
int Test::getAge() const {return _itsAge;}
И мне не нравиться, что другие пользователи моего класса, глазеют на данные-члены класса test
0
Don't worry, be happy
17274 / 10146 / 1963
Регистрация: 27.09.2012
Сообщений: 25,384
Записей в блоге: 1
20.06.2014, 20:25 7
Цитата Сообщение от BESSON_off Посмотреть сообщение
И мне не нравиться, что другие пользователи моего класса, глазеют на данные-члены класса test
Ну одно решение я предложил.

Всё же C++ не удовлетворяет всем требованиям объектно-ориентированного программирования.
0
Эксперт С++
8301 / 6131 / 614
Регистрация: 10.12.2010
Сообщений: 28,667
Записей в блоге: 30
20.06.2014, 21:30 8
Цитата Сообщение от BESSON_off Посмотреть сообщение
И мне не нравиться, что другие пользователи моего класса, глазеют на данные-члены класса test
И что плохого ?
Цитата Сообщение от Croessmah Посмотреть сообщение
Всё же C++ не удовлетворяет всем требованиям объектно-ориентированного программирования.
Это ведь среда подсвечивает, а С++ тут не причем.
0
Don't worry, be happy
17274 / 10146 / 1963
Регистрация: 27.09.2012
Сообщений: 25,384
Записей в блоге: 1
20.06.2014, 21:43 9
Цитата Сообщение от Avazart Посмотреть сообщение
Это ведь среда подсвечивает, а С++ тут не причем.
так я не про среду, а про язык.
0
Jupiter
20.06.2014, 22:38
  #10

Не по теме:

Цитата Сообщение от BESSON_off Посмотреть сообщение
И мне не нравиться, что другие пользователи моего класса, глазеют на данные-члены класса
было б на что глазеть

0
Эксперт С++
8301 / 6131 / 614
Регистрация: 10.12.2010
Сообщений: 28,667
Записей в блоге: 30
21.06.2014, 01:56 11
Цитата Сообщение от Croessmah Посмотреть сообщение
так я не про среду, а про язык.
Тогда к чему ты об этом ?
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
21.06.2014, 01:56

Класс, отделение интерфейса от реализации
Всем привет. Пытаюсь разделить интерфейс от реализации. вот исходный код: файл GradeBook.h ...

Объявление класса без его реализации
Добрый день! Я (вроде бы) знаю как объявлять класс, не подключая его в хедере class...

Не использовать имя класса при его реализации
Из-за того, что не смог грамотно сформулировать свой вопрос, не нашел ничего в гугле :( Поэтому...

Разделение интерфейса и реализации
Добрый день. Пытаюсь разделить проект, создал второй cpp и h файлы. Переменные объявлял в .h, были...


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

Или воспользуйтесь поиском по форуму:
11
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2022, CyberForum.ru