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

__declspec(property) и с чем его едят - C++

Восстановить пароль Регистрация
 
Рейтинг: Рейтинг темы: голосов - 16, средняя оценка - 4.75
Gepar
 Аватар для Gepar
1173 / 529 / 20
Регистрация: 01.07.2009
Сообщений: 3,508
08.09.2011, 11:35     __declspec(property) и с чем его едят #1
Что это такое и как это использовать? У меня задание в лабораторной по обычному с++, но вот такая штука имеет место быть. Насколько я понял это какие-то свойства, прикрученные ms но как они используются?

Заголовочный файл где они есть (сама программа представляет собой структуру по хранению данных о студентах):
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
//#include "stdafx.h"
 
#ifndef TYPES_INCLUDE
#define TYPES_INCLUDE
 
#include <string.h>
 
struct Student 
{
    private:
        CopyIfNotNull(char **Dest, const char *Source);
        void FreeField(char **Dest);
        int CheckStud(Student&);
 
        int BYear;
        float AverMark;
 
        char *sName;
        char *name;
        char *pName;
 
    public:
 
// --------------------------------------------------------------------
 
        int GetBYear()
        {
            return  BYear;
        }
        void SetBYear(int Val = 0)
        {
            BYear = Val;
        }
 
        float GetAverMark()
        {
            return AverMark;
        }
        void SetAverMark(float Val)
        {
            AverMark = Val;
        }
 
 
        char* GetSName()
        {
            char *Val = NULL;
            CopyIfNotNull(&Val, sName);
 
            return Val;
        }
        void SetSName(const char *Val)
        {
            CopyIfNotNull(&sName, Val);
        }
 
 
        char* GetName()
        {
            char *Val = NULL;
            CopyIfNotNull(&Val, name);
 
            return Val;
        }
        void SetName(const char *Val)
        {
            CopyIfNotNull(&name, Val);
        }
 
        char* GetPName()
        {
            char *Val = NULL;
            CopyIfNotNull(&Val, pName);
 
            return Val;
        }
        void SetPName(const char *Val)
        {
            CopyIfNotNull(&pName, Val);
        }
 
// --------------------------------------------------------------------
 
        __declspec(property(get = GetBYear, put = SetBYear)) int BY;
        __declspec(property(get = GetAverMark, put = SetAverMark)) float AM;
        __declspec(property(get = GetSName, put = SetSName)) char *SName;
        __declspec(property(get = GetName, put = SetName)) char *Name;
        __declspec(property(get = GetPName, put = SetPName)) char *PName;
        
 
        
        ClearMem();
        SetFields(const char*, const char*, const char*, int, float);
        Student& operator= (Student&);
        int operator!= (Student&);
        int operator== (Student&);
        int operator<= (Student&);
        int operator>= (Student&);
        int operator> (Student&);
        int operator< (Student&);
 
        Student();
        ~Student();
};
 
 
#endif
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
08.09.2011, 11:35     __declspec(property) и с чем его едят
Посмотрите здесь:

C++ Что такое Класс, и с чем его едят?
C++ Что такое функции и с чем их едят?
Что такое This и с чем его едят C++
Что такое assoc и с чем его едят? C++
C++ что такое Qt, и с чем его едят?
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
kazak
 Аватар для kazak
3029 / 2350 / 155
Регистрация: 11.03.2009
Сообщений: 5,401
08.09.2011, 11:45     __declspec(property) и с чем его едят #2
http://msdn.microsoft.com/en-us/libr...(v=vs.80).aspx
Gepar
 Аватар для Gepar
1173 / 529 / 20
Регистрация: 01.07.2009
Сообщений: 3,508
08.09.2011, 11:51  [ТС]     __declspec(property) и с чем его едят #3
kazak, туда я забегал уже, но там что-то не слишком понятно, как для начинающего, написано.
Deviaphan
Делаю внезапно и красиво
Эксперт C++
 Аватар для Deviaphan
1283 / 1217 / 50
Регистрация: 22.03.2011
Сообщений: 3,744
08.09.2011, 12:04     __declspec(property) и с чем его едят #4
Цитата Сообщение от Gepar Посмотреть сообщение
но там что-то не слишком понятно
Добавляет неявный вызов геттеров/сеттеров для полей. Т.е. пишешь obj.i = 5, а компилятор заменяет это на obj.i_set(5). В С# это делается геттерами/сеттерами по умолчанию с возможностью их подмены, а в С++ от MS их можно создать явно.
Но я бы не советовал ими пользоваться, рефакторинг кода делать сложнее и переносимости никакой.

Добавлено через 2 минуты
Для твоего случая:
__declspec(property(get = GetBYear, put = SetBYear)) int BY;

C++
1
2
obj.BY = 5 /*равнозначно*/  obj.SetBYear(5)
int b = BY /*равнозначно*/ int b = obj.GetBYear()
kazak
 Аватар для kazak
3029 / 2350 / 155
Регистрация: 11.03.2009
Сообщений: 5,401
08.09.2011, 12:05     __declspec(property) и с чем его едят #5
Цитата Сообщение от Deviaphan Посмотреть сообщение
Добавляет неявный вызов геттеров/сеттеров для полей.
Ага, в С# это называется свойство класса.
Yandex
Объявления
08.09.2011, 12:05     __declspec(property) и с чем его едят
Ответ Создать тему
Опции темы

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