当我编写 java 时,可以在初始化类时覆盖抽象方法。我认为它看起来像这样:
AbstractClass object = new AbstractClass(){
void inheritedMethod(){
...
}
};
这是否可以在 C++ 中实现,如果可以,语法是什么?
当我编写 java 时,可以在初始化类时覆盖抽象方法。我认为它看起来像这样:
AbstractClass object = new AbstractClass(){
void inheritedMethod(){
...
}
};
这是否可以在 C++ 中实现,如果可以,语法是什么?
当您在 Java 中执行此操作时,您正在创建一个具体的类,该类在本地定义,没有名称。
您可以在 C++ 中使用本地类定义和变量声明来接近这一点。
class Concrete : public AbstractClass {
public:
void inheritedMethod() {
cout<<"inherited method";
}
} object;
例如,在上下文中:
class AbstractClass {
public:
virtual void inheritedMethod() =0;
};
void bar() {
class Concrete : public AbstractClass {
public:
void inheritedMethod() {
cout<<"inherited method";
}
} object;
object.inheritedMethod();
};
你不能。您必须派生一个子类并实现纯虚方法,然后创建一个对象。
但是你可以通过 lambda 函数来模拟一些东西:
class AbstractClass
{
public:
AbstractClass(std::function<void()> func_) : func(std::move(func_)) {}
const std::function<void()> func;
};
int main()
{
AbstractClass object([]()
{
// the code
});
object.func();
}
不,这是不可能的,C++ 不允许这样做。
您首先必须定义一个新的、独立的类,该类继承自AbstractClass
该类并实例化该类。
首先,我们不能从抽象类中声明一个对象,所以这是不可能的。