繁体   English   中英

C ++声明对象时可以实现虚方法吗?

[英]C++ Can virtual methods be implemented when declaring an object?

经过很长一段时间我几乎完全使用Java后,我又回到了使用C ++的时候,所以当我尝试用Java做的事情但却不能用C ++做的事情时,我会遇到麻烦。

在这种情况下,在Java中,我可以这样做:

class MyClass
{
   public void myMethod();
}

// -------

MyClass myObject = new MyClass(){
    myMethod()
    {
      // Do stuff
    }
};

本质上,我在声明MyClass对象时实现myMethod()的逻辑(注意我的语法可能已关闭)。

我试图找出是否有相当于C ++的东西

我的具体用例是一组服务器/客户端体系结构的测试,其中Test对象扩展基本的Server / Client抽象类并实现控制其行为的虚拟方法。 我需要为每个特定的测试修改此行为,并且在声明Test对象时能够“内联”这些实现,而不是必须为每个特定测试实现Test对象的多个变体,这样做会很方便。

谢谢!

编辑:我已经实现了Smeeheey的答案如下,并且像一个魅力

int main(...)
{

   class TestServer : public BaseServer
   {
      public:
         TestServer(...) : BaseServer(...){...} //Constructor

         void virtualFunction(...){...} // Extended function
   };

   TestServer testInstance(...);

   // Execute tests using testInstance object

}

实际上你可以非常接近,使用匿名的本地结构/类:

class MyClass
{
public:
    virtual void doStuff() = 0;
};

void doStuffWithMyStruct(MyClass& s)
{
    s.doStuff();
}

int main()
{
    class: public MyClass
    {
    public:
        void doStuff() override
        {
            std::cout << "Hello" << std::endl;
        }
    } s;

    doStuffWithMyStruct(s);

    return 0;
}

请注意,在上面,变量s具有匿名类型,与Java非常相似。 可以通过引用其基本类型来访问其函数。 现场演示这里

不,C ++中没有等价物,也不存在C ++中常用类的方式。

在Java中,这将创建一个新的类类型,它派生自MyClass并覆盖myMethod() 这是有效的,因为MyClass类型的变量只是引用,因此这些变量可以保存对派生类的引用。

在C ++中, MyClass类型的变量不是引用。 它们必须是MyClass类型,没有别的。 虽然MyClass &可以保存对从MyClass派生的类的引用,但在这种情况下使用引用(或指针)是非常单一的C ++。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM