![](/img/trans.png)
[英]Is there an implicit pointer to base class subobject when accessing one of its members?
[英]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.