标签:机制 object const public 默认 base 程序员 strong 编译器
一、默认构造函数
对于一个类,程序员不声明它的构造函数,在译器需要使用构造函数的时候,将由编译器生成默认的构造函数。
编译器需要使用默认构造函数的情况分为:
class Point
{
public:
Point():m_x(0),m_y(0)
{
}
int m_x;
int m_y;
};
// 编译器将合成Vec3的默认构造函数
class Vec3
{
public:
Point m_p;
int m_z;
};
class Point
{
public:
Point():m_x(0),m_y(0)
{
}
int m_x;
int m_y;
};
// 编译器将合成Vec3的默认构造函数
class Vec3:public Point
{
public:
int m_z;
};
//编译器将合成Point的默认构造函数
class Point
{
public:
virtual void print()const;
};
//编译器将合成Vec的默认构造函数
class Vec:public virtual Point
{
};
以上四种情况,编译器都会为未声明构造函数的类合成一个默认构造函数以满足编译器的需要,它会调用数据成员或者基类的默认构造函数或者为每个对象初始化虚函数机制和虚基类机制。其他情况下,编译器不会合成默认构造函数。在合成的默认构造函数中,只有base class subobject 和 member class object才会被初始化。所有其他的非静态数据成员(如整数、指针、数组)都不会被初始化。
二、复制构造函数
标签:机制 object const public 默认 base 程序员 strong 编译器
原文地址:https://www.cnblogs.com/along4396/p/11873199.html