非 OOP 版本的"财产"是否有名称?

Is there a name for non-OOP version of 'property'?

本文关键字:是否 有名称 财产 版本 OOP      更新时间:2023-10-16

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"。因此,让我们谈谈您的二传手的表现:

  1. 它在 width更改后呼叫。这样的呼叫通常是 Interupt 信号
  2. 它返回对象的非const引用。这是操作员的行为,它尤其是 do 具有外部类版本

现在让我们谈谈您的功能:int XXX_Width(bool set = false, int val = 0)您已经使用>默认参数将其设置为,以便在您的示例中以固定器或getter的形式进行设置,尽管您的Getter返回很奇怪。

鉴于您提出的两个选项之间的区别,您似乎在问:

是否有使用函数static变量的名称,而不是定义函数并为成员变量提供Getter/setter?

函数范围 static变量称为a static本地变量

static上的一个智慧词:

静态局部变量与局部变量不同,因为静态局部变量只有在调用其居住的函数的次数的次数之后才能初始化,并且通过许多调用函数来保留和访问其值它被声明为 [源]