[英]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.