如何将基类子对象的成员初始化为0?

Hum*_*ity 3 c++ inheritance object

class A
{
  public: int a,b,c;
};

class B: public A
{
   public: int d;
   B():d(0){} // Some hackery needed here
};

int main()
{
   B obj;
   std::cout<< obj.a << std::endl; // garbage
   std::cout<< obj.b << std::endl; // garbage
   std::cout<< obj.c << std::endl; // garbage
   std::cout<< obj.d << std::endl; // 0
}
Run Code Online (Sandbox Code Playgroud)

如何将子对象数据成员a,b和c初始化为0?我不被允许修改A类.

Pra*_*rav 8

尝试

B() : A() , d(0){}
Run Code Online (Sandbox Code Playgroud)

A()值初始化A,因为A是POD,所以成员将被默认(零)初始化


  • 好的,我现在更好地理解它了.我想重要的一段是这样的:"一个对象,其初始化器是一组空的括号,即(),应该是值初始化的" (2认同)
  • ISTR,这是C++ 03和C++ 0X之间的变化.并且g ++ 4.4.4没有将成员设置为0. (2认同)