c++ - 在基类中使用抽象期望它是派生类?

标签 c++ class inheritance abstract

采用这个简单的代码:

class A{ 
  public: 
  virtual void foo() = 0; 
  void x(){ foo(); }
};
class B: public A{ foo(){ ... } };

main(){
  B b;
  b.x();
}

我想要的是构建一个抽象类,该类将具有一个函数,该函数将调用一个期望在派生类中实现它的函数

问题是我似乎无法做到这一点,编译器说它无法编译,因为它找不到要在 x( 中执行的 foo() 的引用(或类似的东西) )的基类。这可以吗?谁能给我举个例子吗?

编辑:似乎当“foo();”时它不起作用位于 A 类(基类)的析构函数内...
这让我很困惑。 =[

EDIT2:这有多有趣。我刚刚创建了一个 callfoo(){ foo();现在它编译正常,但如果我尝试直接从基类 A 的析构函数中调用纯抽象函数,它会给我错误......很奇怪。有人对此有任何想法吗? O_o

请问有什么帮助吗?

谢谢,
乔纳森

更新

它在析构函数之外工作。现在我只是感到困惑。

尝试将“foo()”放入A(基)类的析构函数中,至少对我来说没有编译...

有什么帮助吗?

最佳答案

没有什么可以阻止你这样做:

struct A {
    virtual ~A() {}
    virtual void f() = 0;
    virtual void g() { f(); }
};

struct B : A {
    void f() { std::cout << "B::f()" << std::endl; }
};

// ...
A* a = new B;
a->g(); // prints "B::f()"

至于从析构函数(或构造函数)调用纯虚函数:不要!它会调用未定义的行为。

§10.4/6:

Member functions can be called from a constructor (or destructor) of an abstract class; the effect of making a virtual call (10.3) to a pure virtual function directly or indirectly for the object being created (or destroyed) from such a constructor (or destructor) is undefined.

关于c++ - 在基类中使用抽象期望它是派生类?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2576368/

相关文章:

c++ - OpenCV - 从图像网格中拼接图像

python - 在python程序中定义类外的一些函数有什么好处

c# - 如何使用泛型将此方法放在父类中?

c# - 如何在 Unity3d MonoDevelop 中使用继承?

c++ - 接受类似于 map<X, Y> 的任何类型的模板函数

c++ - 无法获取存储在 vector 结构中的信息

c++ - 知道循环中 std::string 的结尾

.net - VB.NET - 调用多个构造函数

python - 群体碰撞在 Pygame 的平台滚动条上不起作用

python - Python中如何继承和扩展类的属性?