gpt4 book ai didi

C++ 一个有自己方法的对象?

转载 作者:太空狗 更新时间:2023-10-29 23:24:38 24 4
gpt4 key购买 nike

对不起,这可能是个愚蠢的问题。我显然误解了面向对象编程的一些基本知识。我习惯了 C,现在正在尝试使用 C++。

我在一个名为 Button 的类中有一些按钮。每个按钮都有不同的作用。我写的是这样的:

Button button1;
Button button2;
...
void button1::onClick () {
...
}
void button2::onClick () {
...
}

但这不起作用(“按钮 1 不是类、 namespace 或枚举”——是的,我知道!)。我知道我可以为每个按钮创建一个单独的类:

class button1_class : public Button {
public:
void onclick () {
...
}
} button1;
class button2_class : public Button {
...
}

但对我来说,当我确定它只会有一个成员时,开设一个类(class)“感觉”不对。

我正在使用 Agui,这是一个适用于 Allegro 5 的 GUI 库。

编辑

感谢您的回复。虽然它们都很有帮助并且(我认为)都是有效的答案,但实际上还没有人说过“不,你不能拥有一个具有自己独特方法的对象,因为......”

例如,如果 object1 是 ObjectClass 类型,则不允许 object1 拥有 object1 独有的方法(成员函数),而是拥有定义为对象类的一部分。是对的吗?对不起,我没有包括我的实际用例。我对了解 OOP 更感兴趣,这样我就可以自己正确地完成它。

编辑2更详细地查看响应,我认为 lambda 表达式是可能的,只是不是我想象的那样。再次感谢

最佳答案

自然的 C++ 方法是按照 vsoftco 解释的那样,使用虚拟和继承。

但是,如果您的 Button 类已经具备了所需的一切,并且按钮之间唯一发生变化的是要执行的唯一(trhow-away)操作,您可能需要考虑这个替代方案:

class Button {
function<void()> f;
public:
Button(function<void()> mf) : f(mf) {}
void onClick() { f(); }
};

你类(class)的这个变体使用了一个 function 对象(将其视为一种函数指针,但使用起来更加灵活)。

然后您可以将它与 lambda-functions 一起使用 如本例所示:

int main(int ac, char**av) 
{
Button button1([&]() { cout << "Hello 1!\n"; });
Button button2 ([]() { cout << "Hello 2!\n"; });

button1.onClick();
button2.onClick();
}

关于C++ 一个有自己方法的对象?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28384297/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com