繁体   English   中英

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

[英]How to initialize members of the base class subobject to 0?

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
}

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

尝试

B() : A() , d(0){}

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


我测试了这个,因为我觉得它可行(即使没有Prasoon的回答)

B::B() : A(), d(0)
{
}

可能有用,因为你正在“初始化”A.

顺便说一句,它没有。 产量:1,32,123595988

这会工作:

// put this in B.cpp anonymous namespace
const A a_init = { 0, 0 ,0 };

其次是:

B::B() : A( a_init), d(0)
{
}

我正在使用g ++ 4.3.2进行测试。 现在这个工作:

B::B() : A(A()), d(0)
{
}

也许我错过了什么,但是这个怎么样?

class B: public A
{
    public: int d;
    B():d(0){a=b=c=0;}
}

声明派生类构造函数,如下所示

class B: public A
{
   public: int d;
   B():a(0),b(0),c(0),d(0)
   {

   }

};

正确的方法当然是让A的构造函数初始化它的成员。 否则,由于成员不是私有的,您可以从B构造函数中为它们分配值。

a = 0;

等,实际上是有效的。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM