像在Java中一样用c ++实例化一个抽象类

Hug*_*ibo 6 c++ java abstract-class

我在C++个人学习过程中遇到了困难.我来自Java语言.

我试图在C++中设置一个具有抽象方法的类.到那里,没有什么大不了的.但是我想在Java中实例化那个类:

// MyClass has an abstract method named "AbstractMethod"
MyClass class_object = new MyClass()
{
   @Override
   public void AbstractMethod()
   {
     // Do something here
   }
};
class_object.AbstractMethod();
Run Code Online (Sandbox Code Playgroud)

在Java中,它完美地运行.但是我想在C++中做同样的事情,这里有一个问题:C++似乎不喜欢实例化具有虚方法的类的想法.

我已经搜索了几天,我在互联网上找不到任何答案.也许只是我写错了搜索句子,因为我不是母语为英语的人,在问这个问题时我可能会遇到一些困难.

在C++中,我是否有可能像在Java中一样,或者至少可能?使用模板是解决方案吗?(之前从未学过模板,我还有很多需要学习的东西).

此外,我无法创建许多类来重新定义方法,因为此类将用于为每个实例执行自定义处理.我认为,创建课程只是为了让它成为这种类型中唯一一个对象的骄傲之父.

Nim*_*Nim 6

我会说 - 在c ++中,相当于你的java代码将是:

#include <iostream>

struct A {
    virtual void foo() = 0;
};

int main(void) {
    struct B : public A {
        void foo() override {
            std::cout << "inst::foo()" << std::endl;
        }
    };
    A* p = new B;
    p->foo();
}
Run Code Online (Sandbox Code Playgroud)

正如您所看到的那样,没有实例化抽象类,您必须提供实例化的具体实现.微妙的区别是在java中它是一个匿名类,这里不是......

  • 可能想在`main()`的末尾添加一个`delete p;`.C++没有垃圾收集,所以忘记释放一个动态分配的对象(充其量)是一个糟糕的想法,并且(最坏的情况下)在C++中是一个非常糟糕的主意. (2认同)