程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> C++ >> 關於C++ >> C++實現自動為對象添加“屬性”訪問代碼

C++實現自動為對象添加“屬性”訪問代碼

編輯:關於C++

對於c#而言,一個類可以有成員變量、成員函數、和屬性,然而在C++中卻沒有“屬 性”這一概念。為了達到相同的效果,在C++中一般是采用get_XXX()和set_XXX()兩個 函數來實現外部對成員變量的訪問。這樣做的弊端很明顯,類的聲明中多了很多冗余的代碼 :

private:
int m_data;
public:
int get_data() const;
int set_data(int value);

為了定義一個data屬性,需要寫很多代碼,事實上,我們想把上述代碼編程一句,那麼, 這個宏就可以實現:

#define AUTO_PROPERTY(type, name) \
private: type m_##name; \
public: type get_##name() const {return m_##name;} \
public: type set_##name(const type &value) \
{return m_##name, m_##name = value;}

然後我們就可以簡化代碼,增加可讀性:

class class1
{
AUTO_PROPERTY(int, data)
};

這樣,就實現了為class1增加一個名為data的屬性,同時提供了基本的訪問控制函數 get_data()和set_data()。當然這個宏能做到的僅僅是簡化代碼和增加可讀性,並未提供一 種全新的“屬性”模式。如果想自定義get_data()或set_data()函數,這個宏就 不夠用了,所以,我再給出下面幾個宏,可以達到自定義get,set函數的效果:

#define PROPERTY(type, name) \
private: type m_##name; \
public: type get_##name() const; \
public: type set_##name(const type &value);

#define PROPERTY_GET(classname, type, name) \
type classname::get_##name() const

#define PROPERTY_SET(classname, type, name) \
type classname::set_##name(const type &value)

使用舉例:

class myclass
{
public:
PROPERTY(int, data)
};
PROPERTY_GET(myclass, int, data)
{
return m_data;
}
PROPERTY_SET(myclass, int, data)
{
return m_data = value;
}

當然,這只是我提供的一種簡便方法,拋磚引玉而已,歡迎指教。

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved