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++的等价物
我的具体用例是针对服务器/客户端体系结构的一组测试,其中测试对象扩展了基本的服务器/客户端抽象类,并实现了控制其行为的虚拟方法。我需要为每个特定的测试修改这种行为,并且在声明测试对象时能够"内联"这些实现会很方便,而不必为每个特定测试在测试对象上实现几个变体。
谢谢!
编辑:我已经实现了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++。
相关文章:
- 用常见虚拟函数实现的任意组合来实现派生类的正确方法是什么
- 有没有比在库中添加一个并非由所有派生类实现的新虚拟函数更好的设计实践
- 如何在 C# 中实现C++虚拟纯类?
- 将C++子类成员函数(虚拟实现)传递给 C 类型函数指针
- 实现虚拟方法的组合行为
- 如何实现虚拟Inteface C
- 如何使用C 实现虚拟静态行为
- 允许其他基类实现虚拟函数
- 实现虚拟函数时对 vtable 的未定义引用
- 在 C++11 中实现虚拟方法条件
- 如何在c++中实现虚拟表
- 在没有虚拟关键字的情况下实现虚拟函数
- 如何在实现文件中实现虚拟方法
- 未实现虚拟功能
- 实现虚拟机C++的堆栈
- 在声明虚拟方法的父分支之外的其他父分支中实现虚拟方法
- C++在声明对象时可以实现虚拟方法吗
- 在继承中实现虚拟函数
- 从派生模板类中的基类重新实现虚拟函数
- 嵌入铬 - 实现虚拟功能C++