看了Inside The C++ Object Model这本书后感觉真的很爽,不过看起来也很费力。
关于构造函数的语义,上面讲的很深奥,不过看明白后会升华个人能力的
提出下面问题。
1:一个类没有显示的构造函数,那么当该类的对象产生时,它的默认构造函数一定被调用吗?如果这个默认构造函数被调用,它会将类中的数据成员变量都初始化为0吗?还是不初始化类中的成员变量?
class Foo
{
int val;
};
void Foo_()
{
Foo foo;////注意foo是怎么初始化val的,还是不初始化,还是随机初始化
}
2:一个类的初始化需要依赖于另外一个类
比如:
class Foo
{
public:
Foo();
private:
int val;
};
class Bar
{
public:
Foo foo;//内含Foo的对象
char *str;
};
void Foo_Bar()
{
Bar bar;//注意bar是怎么初始化的
}
3:含有虚拟函数的构造函数和非虚拟的构造函数的实现原理是否一样?
如果不一样,含有虚拟函数的默认构造函数的实现机理是什么?
class human
{
public:
man();
virtual void getage();
virtual void getsex();
private:
int age;
int sex;//0为男 1为女
};
class baby : public human
{
///////内容省略
};
void Human_Baby()
{
baby MyBaby;//注意MyBaby构造时的一系列编译器的操作,涉及到虚拟函数表的构造
}
关于这些问题的答案就得翻看Inside The C++ Object Model这本书了,上面的问题只是提供了一个学习的线索,涉及到内部实现是很复杂的,在这里写出也没有必要