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类。
答案 0 :(得分:8)
尝试
B() : A() , d(0){}
A()值初始化A,因为A是POD,所以成员将默认(零)初始化
答案 1 :(得分:4)
我测试了这个,因为我认为它可能有效(即使没有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)
{
}
答案 2 :(得分:1)
也许我错过了什么,但是这个怎么样?
class B: public A
{
public: int d;
B():d(0){a=b=c=0;}
}
答案 3 :(得分:1)
声明派生类构造函数,如下所示
class B: public A
{
public: int d;
B():a(0),b(0),c(0),d(0)
{
}
};
答案 4 :(得分:1)
正确的方法当然是让A的构造函数初始化它的成员。否则,由于成员不是私有的,您可以从B构造函数中为它们分配值。
a = 0;
等,实际上有效。