c++ get与set方法的宏定义实现

简介:

一、文章来由

国庆节依然顽强的码代码,项目中需要用到 get 和 set 方法,但是问题来了,因为是 c++ 的,并不像 java 的 eclipse 有自动生成 get 和 set 方法。如果手写是可以,但是当属性特别多的时候会非常麻烦。。。但是宏定义方法可以搞定这个问题~~

二、具体代码

2.1 非指针类型成员变量

// PropertyBuilderByName 用于生成类的成员变量
// 并生成set和get方法
// type 为变量类型
// access_permission 为变量的访问权限(public, priavte, protected)

#define PropertyBuilderByName(type, name, access_permission)\
    access_permission:\
        type m_##name;\
    public:\
    inline void set##name(type v) {\
        m_##name = v;\
    }\
    inline type get##name() {\
        return m_##name;\
    }\

分析:

可以这样写的原因就是因为 #define 预处理,是在编译器编译之前执行的纯字符串替换,这里的 ##name 会直接被替换成传入的 name,所以该宏生成成员变量 m_name 由 name 决定,其访问权限由 acess_permission 指定

另外:

`#define语句中的#是把参数字符串化,##是连接两个参数成为一个整体。

2.2 指针类型成员变量

同样的道理:

#define PointerPropertyBuilderByName(type, name, access_permission)\
    access_permission:\
        type* m_##name;\
    public:\
        inline void set##name(type* v){\
            m_##name = v;\
        }\
        inline type* get##name(){\
            return m_##name;\
        }\

2.3 test

“`c++
class Test
{
PropertyBuilderByName(int, A, private)
PointerPropertyBuilderByName(double, DBV, private)
};

int main()
{
Test t;

t.setA(10);
cout << "A = " << t.getA() << endl;

double a = 12.3445;
t.setDBV(&a);
cout << "DBV: " << *(t.getDBV()) << endl;

system("pause");
return 0;

}

—END—


相关文章
|
12天前
|
存储 算法 Java
解析HashSet的工作原理,揭示Set如何利用哈希算法和equals()方法确保元素唯一性,并通过示例代码展示了其“无重复”特性的具体应用
在Java中,Set接口以其独特的“无重复”特性脱颖而出。本文通过解析HashSet的工作原理,揭示Set如何利用哈希算法和equals()方法确保元素唯一性,并通过示例代码展示了其“无重复”特性的具体应用。
30 3
|
6天前
|
Rust Java
set 方法是坏味道?
【10月更文挑战第19天】
17 5
|
24天前
|
C#
SET访问器和GET访问器
SET访问器和GET访问器
25 2
|
2月前
|
编译器 API C语言
超级好用的C++实用库之跨平台实用方法
超级好用的C++实用库之跨平台实用方法
34 6
|
13天前
|
存储
ES6中的Set数据结构的常用方法和使用场景
ES6中的Set数据结构的常用方法和使用场景
|
2月前
|
JavaScript 前端开发
JavaScript 中的新 Set 方法
JavaScript 中的新 Set 方法
22 1
|
3月前
|
Python
python中set和frozenset方法和区别
python中set和frozenset方法和区别
|
2月前
|
JavaScript 前端开发 Java
通过Gtest访问C++静态、私有、保护变量和方法
通过Gtest访问C++静态、私有、保护变量和方法
55 0
|
3月前
|
C++
C++ 避免多重定义的方法
C++ 避免多重定义的方法
55 0
|
14天前
|
存储 编译器 对象存储
【C++打怪之路Lv5】-- 类和对象(下)
【C++打怪之路Lv5】-- 类和对象(下)
19 4