非 OOP 版本的"财产"是否有名称?
Is there a name for non-OOP version of 'property'?
afaik在C 中,我们将getter/setter函数称为'属性'。Getter/Setter用于获取/设置成员变量。这样做的优点之一是我们可以聆听更改,例如:
// In header:
class XXX {
int m_width{};
void OnWidthChanged() {
// do something...
}
public:
int Width() const {
return m_width;
}
void Width(int val)
m_width = val;
this->OnWidthChanged();
}
};
// In CPP:
XXX my_xxx;
my_xxx.Width(123);
cout << my_xxx.Width() << endl;
现在,我发现静态变量可用于实现类似的事情,以非oop时尚知道它无法处理多个现实,所以让我们假设xxx是一个只有1个对象实例。
// In header:
int XXX_Width(bool set = false, int val = 0);
void XXX_OnWidthChanged();
// In CPP:
int XXX_Width(bool set, int val) {
static int width = 0;
if (set) {
width = val;
XXX_OnWidthChanged();
}
return width;
}
XXX_Width(true, 123);
cout << XXX_Width() << endl;
我的问题是,是否有的名称或术语> XXX_Width()
之类的函数?我正在寻找一个名称,以便我可以Google搜索相关信息。我不是要求OnWidthChanged()
的名称。
在这里术语很多混乱。
oop只是意味着您拥有及其功能封装的自主类。您的两个示例都使用OO,尽管如果它们不好或设计好是另一回事。
现在,我发现静态变量可用于以非pop方式实现类似的东西:
您的示例没有什么非木琴。但是,这可能是糟糕的OO设计,因为您的班级的多个实例可能访问相同的功能。从线程安全的角度来看,这也是不良的设计。
有时,在本地使用静态变量是完全可以的,例如在实现" singleton"类时。
在C 中,我们将Getter/Setter函数称为"属性"
不,这不是一个普遍的术语。Getter/Setter功能称为成员或成员功能。或可能是公共成员功能,因为根据定义,必须是公开的。它们使用的另一个术语是方法。
术语属性通常用于描述公共成员变量。通常,rad工具将术语属性用于此类变量。
我的问题是,这种功能是否有名称或术语?
由呼叫者指定的函数,但由其他人(类,OS,一个中断等)调用 callback函数。这是一个相当广泛的术语。
在您的情况下,您似乎使用"事件"之类的回调函数 - 事件是一种回调函数,而是一个更高级别的概念。像您的示例这样的代码可用于所谓的"事件驱动设计",在RAD工具中也很受欢迎。
应该提出的1 st 是您的"属性块"或" getter/setter"是不合格的。预期的声明看起来像:
int Width() const;
void Width(const int);
因此,当您将设置器更改为:XXX& Width(int)
时,很明显您不是在谈论"属性块"。或" getter/setters"。因此,让我们谈谈您的二传手的表现:
- 它在
width
更改后呼叫。这样的呼叫通常是 Interupt 或信号 - 它返回对象的非
const
引用。这是操作员的行为,它尤其是 do 具有外部类版本
现在让我们谈谈您的功能:int XXX_Width(bool set = false, int val = 0)
您已经使用>默认参数将其设置为,以便在您的示例中以固定器或getter的形式进行设置,尽管您的Getter返回很奇怪。
鉴于您提出的两个选项之间的区别,您似乎在问:
是否有使用函数static
变量的名称,而不是定义函数并为成员变量提供Getter/setter?
函数范围 static
变量称为a static
本地变量。
static
上的一个智慧词:
静态局部变量与局部变量不同,因为静态局部变量只有在调用其居住的函数的次数的次数之后才能初始化,并且通过许多调用函数来保留和访问其值它被声明为 [源]
- 声明是否有可能逃脱其封闭的名称空间
- 是否有一种方法可以避免标头文件中使用的constexpr函数输入全局范围,而无需额外的名称空间
- 是否有获取 *.exe 文件的产品名称的函数?
- 在C/C 中,是否有可能在编译时将函数的名称放入代码中
- clang,linux是否有一个选项可以在链接时更改共享库名称
- 非 OOP 版本的"财产"是否有名称?
- 是否有一种简单的方法可以在运行时在C 中创建/名称对象
- 是否有任何窗口函数可以使用域名获取所有OU(组织单位)名称
- C++:此模式是否有名称,是否可以改进
- 是否有标准名称(模板或宏)来替换ARRAY_SIZE、_countof等
- 是否有删除半个双向链表边缘的名称
- 是否有技术原因不允许using声明以不同的名称访问函数名
- CM_Get_DevNode_Property_Keys是否有获取密钥名称的方法
- 这种类型的优化是否有一个名称?
- 是否有c++ type_info的可移植包装器来标准化类型名称字符串格式?
- 检查是否有多个字符串为空并打印它们的名称
- 此方法是否已经有名称
- 在名称空间中搜索名称时是否有任何顺序
- 像"__LINE__"一样,C/C++ 中是否有任何打印线程名称或 ID 的标准宏?
- 在std::future::then周围是否有这个方便包装的名称?