gpt4 book ai didi

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

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

在很长一段时间几乎完全使用 Java 之后,我又回到了 C++ 工作,所以当我尝试做一些我可以用 Java 做但不能用 C++ 做的事情时,我遇到了障碍。

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

class MyClass
{
public void myMethod();
}

// -------

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

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

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

我的具体用例是针对服务器/客户端架构的一组测试,其中测试对象扩展了基本的服务器/客户端抽象类并实现了控制其行为的虚拟方法。我需要为每个特定测试修改此行为,并且在声明 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很像。它的功能可以通过对其基类型的引用来访问。现场演示 here .

关于C++ 声明对象时可以实现虚方法吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38784972/

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