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

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

本文关键字:实现 虚拟 方法 声明 对象 C++      更新时间:2023-10-16

在几乎完全使用Java很长一段时间后,我又开始使用C++了,所以当我试图做一些在Java中可以做但在C++中做不到的事情时,我遇到了障碍。

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

class MyClass
{
   public void myMethod();
}
// -------
MyClass myObject = new MyClass(){
    myMethod()
    {
      // Do stuff
    }
};

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

我想知道是否有C++的等价物

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

谢谢!

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

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++。