当我编写java时,可以在初始化类时覆盖抽象方法。我觉得它看起来像这样:
AbstractClass object = new AbstractClass(){
void inheritedMethod(){
...
}
};
这可以用C ++做,如果有,那么语法是什么?
答案 0 :(得分:5)
在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();
};
答案 1 :(得分:3)
不,这是不可能的,C ++不允许这样做。
首先必须定义一个新的,独立的类,它继承自AbstractClass
并实例化该类。
答案 2 :(得分:3)
但是你可以通过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();
}
答案 3 :(得分:0)
首先,我们不能从抽象类声明一个对象,因此不可能。