Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/objective-c/22.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ C++;问题:与Obj-C协议类似的功能?_C++_Objective C_Protocols_Delegation - Fatal编程技术网

C++ C++;问题:与Obj-C协议类似的功能?

C++ C++;问题:与Obj-C协议类似的功能?,c++,objective-c,protocols,delegation,C++,Objective C,Protocols,Delegation,我习惯于在代码中使用Objective-C协议;它们在很多方面都令人难以置信。然而,在C++中,我不知道如何实现同样的事情。下面是一个例子: 表视图,具有函数setDelegate(协议*delegate) 类的委托,但实现协议“协议” 类2的委托,也实现“协议” setDelegate(objOfClass)和setDelegate(objOfClass2)都有效 在Obj-C中,这是很简单的,但是我不能理解如何在C++中实现它。甚至有可能吗?基本上,不考虑“协议”,而是考虑“具有纯虚拟函数的

我习惯于在代码中使用Objective-C协议;它们在很多方面都令人难以置信。然而,在C++中,我不知道如何实现同样的事情。下面是一个例子:

  • 表视图,具有函数setDelegate(协议*delegate)
  • 类的委托,但实现协议“协议”
  • 类2的委托,也实现“协议”
  • setDelegate(objOfClass)和setDelegate(objOfClass2)都有效
  • 在Obj-C中,这是很简单的,但是我不能理解如何在C++中实现它。甚至有可能吗?

    基本上,不考虑“协议”,而是考虑“具有纯虚拟函数的基类”,有时在其他语言中称为接口

    class Protocol
    {
    public:
        virtual void Foo() = 0;
    };
    
    class Class : public Protocol
    {
    public:
        void Foo() { }
    };
    
    class Class2 : public Protocol
    {
    public:
        void Foo() { }
    };
    
    class TableView
    {
    public:
        void setDelegate(Protocol* proto) { }
    };
    

    谢谢,除了我有一个问题。不同的类,即类和类2,它们本身已经是子类了。@jfm429,这就是类可以有多个祖先的原因。啊,我忘了这一点。我可以看到它有很多问题,特别是我在过去使用过的一些特定类结构(我以前研究过单继承/多继承,有优点和缺点,主要是缺点),但在这种情况下它不会引起任何问题。好吧,我认为这很好,但后来我出现了这些错误:是的,“Classin”与错误中显示的相同,即使它应该是“Class in”。有什么想法吗?(编辑:将文本放置在该链接处,因为这些子元素似乎无法使用换行符进行格式化…)如果将虚函数声明声明为纯虚函数,则不需要空函数体,即使用=0;就像我在上面的例子中做的那样。