C++在子类中调用虚方法

mar*_*igo 6 c++ virtual-functions

我有以下课程:

class A {
protected:
     A *inner;
public:
    ....
    virtual void doSomething() = 0;
    ....
}

class B: public A {
   ...
   void doSomething() {
       if(inner != NULL)
           inner->doSomething();
   }
   ...
}
Run Code Online (Sandbox Code Playgroud)

当我使用时,inner->doSomething()我得到了分段错误.我怎么办才能打电话inner->doSomething()给B班?

提前致谢.

Jar*_*Par 9

如果没有成员内部的显式初始化,它可能既不是NULL也不是指向无效的内存.你能告诉我们明确内在化的代码吗?

A的适当构造函数如下

protected:
A() : inner(NULL) {
  ...
}
Run Code Online (Sandbox Code Playgroud)

  • 没有初始化它,因为我预期将是NULL并且if语句为false.我不知道对象既不是NULL也不是指向无效的内存.我刚刚在B的construtor做了内部= NULL并解决了问题.非常感谢你. (2认同)
  • 注意:对于所有标准类型(指针,int,float等...也称为内置类型),变量在构建时不会被初始化(没有"默认构造函数").由于'inner'是A的一个属性,因此A的构造函数负责初始化它,否则你会遇到每个子类的问题...... (2认同)